diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
commit | 1a78a62555be32868418fe52f8e330c9d0f95d5a (patch) | |
tree | d3765a80e7d3b9640ec2e930743630cd6b9fce2b /libs/regex | |
download | boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.gz boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.bz2 boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.zip |
Imported Upstream version 1.49.0upstream/1.49.0
Diffstat (limited to 'libs/regex')
286 files changed, 67358 insertions, 0 deletions
diff --git a/libs/regex/build/Jamfile.v2 b/libs/regex/build/Jamfile.v2 new file mode 100644 index 0000000000..5a754a9306 --- /dev/null +++ b/libs/regex/build/Jamfile.v2 @@ -0,0 +1,153 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +import modules ; + +project : requirements + # default to all warnings on: + <warnings>all + ; + +local disable-icu = [ MATCH (--disable-icu) : [ modules.peek : ARGV ] ] ; + +rule path_options ( properties * ) +{ + local result ; + if <address-model>64 in $(properties) + { + result = <search>$(ICU_PATH)/bin64 <search>$(ICU_PATH)/lib64 ; + } + else + { + result = <search>$(ICU_PATH)/bin <search>$(ICU_PATH)/lib ; + } + return $(result) ; +} + + +# +# ICU configuration: +# +if ! $(disable-icu) +{ + + if [ modules.peek : ICU_PATH ] + { + ICU_PATH = [ modules.peek : ICU_PATH ] ; + } + if [ modules.peek : ICU_LINK ] + { + ICU_LINK = [ modules.peek : ICU_LINK ] ; + } + + if $(ICU_LINK) + { + ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <define>BOOST_HAS_ICU=1 <runtime-link>shared ; + } + else + { + lib icuuc : : <link>shared <runtime-link>shared <conditional>@path_options ; + lib icuuc : : <toolset>msvc <variant>debug <name>icuucd <link>shared <runtime-link>shared <conditional>@path_options ; + lib icuuc : : <name>this_is_an_invalid_library_name ; + + lib icudt : : <name>icudata <link>shared <runtime-link>shared <conditional>@path_options ; + lib icudt : : <name>icudt <toolset>msvc <link>shared <runtime-link>shared <conditional>@path_options ; + lib icudt : : <name>this_is_an_invalid_library_name ; + + lib icuin : : <name>icui18n <link>shared <runtime-link>shared <conditional>@path_options ; + lib icuin : : <toolset>msvc <variant>debug <name>icuind <link>shared <runtime-link>shared <conditional>@path_options ; + lib icuin : : <toolset>msvc <variant>release <name>icuin <link>shared <runtime-link>shared <conditional>@path_options ; + lib icuin : : <name>this_is_an_invalid_library_name ; + + if $(ICU_PATH) + { + icuucd_name = [ GLOB $(ICU_PATH)/bin : icuuc??d.dll ] ; + if ! $(icuucd_name) + { + icuucd_name = [ GLOB $(ICU_PATH)/bin64 : icuuc??d.dll ] ; + } + icuuc_name = [ GLOB $(ICU_PATH)/bin : icuuc??.dll ] ; + if ! $(icuuc_name) + { + icuuc_name = [ GLOB $(ICU_PATH)/bin64 : icuuc??.dll ] ; + } + icudt_name = [ GLOB $(ICU_PATH)/bin : icudt??.dll ] ; + if ! $(icudt_name) + { + icudt_name = [ GLOB $(ICU_PATH)/bin64 : icudt??.dll ] ; + } + icuin_name = [ GLOB $(ICU_PATH)/bin : icuin??.dll ] ; + if ! $(icuin_name) + { + icuin_name = [ GLOB $(ICU_PATH)/bin64 : icuin??.dll ] ; + } + icuind_name = [ GLOB $(ICU_PATH)/bin : icuin??d.dll ] ; + if ! $(icuind_name) + { + icuind_name = [ GLOB $(ICU_PATH)/bin64 : icuin??d.dll ] ; + } + + #ECHO $(icuucd_name:B) $(icuuc_name:B) $(icudt_name:B) $(icuin_name:B) $(icuind_name:B) ; + } + + ICU_OPTS = + <include>$(ICU_PATH)/include + <library>icuuc/<link>shared/<runtime-link>shared + <library>icudt/<link>shared/<runtime-link>shared + <library>icuin/<link>shared/<runtime-link>shared + <define>BOOST_HAS_ICU=1 + <runtime-link>shared + <toolset>msvc:<linkflags>/delayload:$(icuucd_name:B).dll + <toolset>msvc:<linkflags>/delayload:$(icuuc_name:B).dll + <toolset>msvc:<linkflags>/delayload:$(icudt_name:B).dll + <toolset>msvc:<linkflags>/delayload:$(icuin_name:B).dll + <toolset>msvc:<linkflags>/delayload:$(icuind_name:B).dll + <toolset>msvc:<linkflags>delayimp.lib + ; + } + +} + +exe has_icu : ./has_icu_test.cpp : $(ICU_OPTS) ; +explicit has_icu ; + +alias icu_options : : : : [ check-target-builds has_icu : $(ICU_OPTS) : ] ; + +SOURCES = + c_regex_traits.cpp + cpp_regex_traits.cpp + cregex.cpp + fileiter.cpp + icu.cpp + instances.cpp + posix_api.cpp + regex.cpp + regex_debug.cpp + regex_raw_buffer.cpp + regex_traits_defaults.cpp + static_mutex.cpp + w32_regex_traits.cpp + wc_regex_traits.cpp + wide_posix_api.cpp + winstances.cpp + usinstances.cpp ; + + +lib boost_regex : ../src/$(SOURCES) icu_options + : + <link>shared:<define>BOOST_REGEX_DYN_LINK=1 + #<toolset>gcc-mw:<link>static + #<toolset>gcc-mingw:<link>static + <toolset>gcc-cygwin:<link>static + ; + +boost-install boost_regex ; + + + + + + + diff --git a/libs/regex/build/bc_gen.sh b/libs/regex/build/bc_gen.sh new file mode 100644 index 0000000000..d2fdf2613e --- /dev/null +++ b/libs/regex/build/bc_gen.sh @@ -0,0 +1,271 @@ +#! /bin/bash + +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +libname="" +src="" +header="" +all_dep="" + +# current makefile: +out="" +# temporary file: +tout="" +# install target temp file: +iout="" +# debug flag: +debug="no" +# compile options: +opts="" +# main output sub-directory: +subdir="" + +####################################################################### +# +# section for C++ Builder +# +####################################################################### + +function bcb_gen_lib() +{ + all_dep="$all_dep $subdir\\$libname $subdir\\$libname.lib" + echo " copy $subdir\\$libname.lib \$(BCROOT)\\lib" >> $iout +# +# set up section comments: + cat >> $tout << EOF +######################################################## +# +# section for $libname.lib +# +######################################################## +EOF +# +# process source files: + all_obj="" + all_lib_obj="" + for file in $src + do + obj=`echo "$file" | sed 's/.*src\/\(.*\)cpp/\1obj/g'` + obj="$subdir\\$libname\\$obj" + all_obj="$all_obj $obj" + all_lib_obj="$all_lib_obj +\"$obj\"" + echo "$obj: $file \$(ALL_HEADER)" >> $tout + echo " bcc32 @&&|" >> $tout + echo "-c \$(INCLUDES) $opts \$(CXXFLAGS) -o$obj $file" >> $tout + echo "|" >> $tout + echo "" >> $tout + done +# +# now for the directories for this library: + echo "$subdir\\$libname : " >> $tout + echo " -@mkdir $subdir\\$libname" >> $tout + echo "" >> $tout +# +# now for the clean options for this library: + all_clean="$all_clean $libname""_clean" + echo "$libname"_clean : >> $tout + echo " del $subdir\\$libname\\"'*.obj' >> $tout + echo " del $subdir\\$libname\\"'*.il?' >> $tout + echo " del $subdir\\$libname\\"'*.csm' >> $tout + echo " del $subdir\\$libname\\"'*.tds' >> $tout + echo "" >> $tout +# +# now for the main target for this library: + echo $subdir\\$libname.lib : $all_obj >> $tout + echo " if exist $subdir\\$libname.lib del $subdir\\$libname.lib " >> $tout + echo " tlib @&&|" >> $tout + echo "/P128 /C /u /a \$(XSFLAGS) \"$subdir\\$libname.lib\" $all_lib_obj" >> $tout + echo "|" >> $tout + echo "" >> $tout +} + +function bcb_gen_dll() +{ + all_dep="$all_dep $subdir\\$libname $subdir\\$libname.lib" + echo " copy $subdir\\$libname.lib \$(BCROOT)\\lib" >> $iout + echo " copy $subdir\\$libname.dll \$(BCROOT)\\bin" >> $iout + echo " copy $subdir\\$libname.tds \$(BCROOT)\\bin" >> $iout +# +# set up section comments: + cat >> $tout << EOF +######################################################## +# +# section for $libname.lib +# +######################################################## +EOF +# +# process source files: + all_obj="" + for file in $src + do + obj=`echo "$file" | sed 's/.*src\/\(.*\)cpp/\1obj/g'` + obj="$subdir\\$libname\\$obj" + all_obj="$all_obj $obj" + echo "$obj: $file \$(ALL_HEADER)" >> $tout + echo " bcc32 @&&|" >> $tout + echo "-c \$(INCLUDES) $opts \$(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -o$obj $file" >> $tout + echo "|" >> $tout + echo "" >> $tout + done +# +# now for the directories for this library: + echo "$subdir\\$libname :" >> $tout + echo " -@mkdir $subdir\\$libname" >> $tout + echo "" >> $tout +# +# now for the clean options for this library: + all_clean="$all_clean $libname""_clean" + echo "$libname"_clean : >> $tout + echo " del $subdir\\$libname\\"'*.obj' >> $tout + echo " del $subdir\\$libname\\"'*.il?' >> $tout + echo " del $subdir\\$libname\\"'*.csm' >> $tout + echo " del $subdir\\$libname\\"'*.tds' >> $tout + echo " del $subdir\\"'*.tds' >> $tout + echo "" >> $tout +# +# now for the main target for this library: + echo $subdir\\$libname.lib : $all_obj >> $tout + echo " bcc32 @&&|" >> $tout + echo "-lw-dup -lw-dpl $opts -e$subdir\\$libname.dll \$(XLFLAGS) $all_obj \$(LIBS)" >> $tout + echo "|" >> $tout + echo " implib -w $subdir\\$libname.lib $subdir\\$libname.dll" >> $tout + echo "" >> $tout +} + + + +function bcb_gen() +{ + tout="temp" + iout="temp_install" + all_dep="$subdir" + all_clean="" + echo > $out + echo > $tout + rm -f $iout + + libname="libboost_regex-${subdir}-s-${boost_version}" + opts="-tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I\$(BCROOT)\include;../../../" + bcb_gen_lib + + libname="libboost_regex-${subdir}-mt-s-${boost_version}" + opts="-tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../" + bcb_gen_lib + + libname="boost_regex-${subdir}-mt-${boost_version}" + opts="-tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../ -L\$(BCROOT)\lib;\$(BCROOT)\lib\release;" + bcb_gen_dll + + libname="boost_regex-${subdir}-${boost_version}" + opts="-tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../ -L\$(BCROOT)\lib;\$(BCROOT)\lib\release;" + bcb_gen_dll + + libname="libboost_regex-${subdir}-mt-${boost_version}" + opts="-tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../ -L\$(BCROOT)\lib;\$(BCROOT)\lib\release;" + bcb_gen_lib + + libname="libboost_regex-${subdir}-${boost_version}" + opts="-tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../ -L\$(BCROOT)\lib;\$(BCROOT)\lib\release;" + bcb_gen_lib + + libname="libboost_regex-${subdir}-sd-${boost_version}" + opts="-tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I\$(BCROOT)\include;../../../" + bcb_gen_lib + + libname="libboost_regex-${subdir}-mt-sd-${boost_version}" + opts="-tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../" + bcb_gen_lib + + libname="boost_regex-${subdir}-mt-d-${boost_version}" + opts="-tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../ -L\$(BCROOT)\lib;\$(BCROOT)\lib\release;" + bcb_gen_dll + + libname="boost_regex-${subdir}-d-${boost_version}" + opts="-tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../ -L\$(BCROOT)\lib;\$(BCROOT)\lib\release;" + bcb_gen_dll + + libname="libboost_regex-${subdir}-mt-d-${boost_version}" + opts="-tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../ -L\$(BCROOT)\lib;\$(BCROOT)\lib\release;" + bcb_gen_lib + + libname="libboost_regex-${subdir}-d-${boost_version}" + opts="-tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I\$(BCROOT)\include;../../../ -L\$(BCROOT)\lib;\$(BCROOT)\lib\release;" + bcb_gen_lib + + cat > $out << EOF +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for C++ Builder +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your C++ Builder /lib and /bin directories (recomended) +# make clean +# removes all temporary files. + +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional libraries to link to here: +# +LIBS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!ifndef BCROOT +BCROOT=\$(MAKEDIR)\\.. +!endif + +EOF + echo "" >> $out + echo "ALL_HEADER=$header" >> $out + echo "" >> $out + echo "all : $all_dep" >> $out + echo >> $out + echo "clean : $all_clean" >> $out + echo >> $out + echo "install : all" >> $out + cat $iout >> $out + echo >> $out + echo $subdir : >> $out + echo " -@mkdir $subdir" >> $out + echo "" >> $out + + cat $tout >> $out +} + +. common.sh + +# +# generate C++ Builder 6 files: +out="bcb6.mak" +subdir="bcb" +has_stlport="yes" +bcb_gen + + + + + + diff --git a/libs/regex/build/bcb6.mak b/libs/regex/build/bcb6.mak new file mode 100644 index 0000000000..4fea7c083c --- /dev/null +++ b/libs/regex/build/bcb6.mak @@ -0,0 +1,1337 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for C++ Builder +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your C++ Builder /lib and /bin directories (recomended) +# make clean +# removes all temporary files. + +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional libraries to link to here: +# +LIBS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!ifndef BCROOT +BCROOT=$(MAKEDIR)\.. +!endif + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : bcb bcb\libboost_regex-bcb-s-1_47 bcb\libboost_regex-bcb-s-1_47.lib bcb\libboost_regex-bcb-mt-s-1_47 bcb\libboost_regex-bcb-mt-s-1_47.lib bcb\boost_regex-bcb-mt-1_47 bcb\boost_regex-bcb-mt-1_47.lib bcb\boost_regex-bcb-1_47 bcb\boost_regex-bcb-1_47.lib bcb\libboost_regex-bcb-mt-1_47 bcb\libboost_regex-bcb-mt-1_47.lib bcb\libboost_regex-bcb-1_47 bcb\libboost_regex-bcb-1_47.lib bcb\libboost_regex-bcb-sd-1_47 bcb\libboost_regex-bcb-sd-1_47.lib bcb\libboost_regex-bcb-mt-sd-1_47 bcb\libboost_regex-bcb-mt-sd-1_47.lib bcb\boost_regex-bcb-mt-d-1_47 bcb\boost_regex-bcb-mt-d-1_47.lib bcb\boost_regex-bcb-d-1_47 bcb\boost_regex-bcb-d-1_47.lib bcb\libboost_regex-bcb-mt-d-1_47 bcb\libboost_regex-bcb-mt-d-1_47.lib bcb\libboost_regex-bcb-d-1_47 bcb\libboost_regex-bcb-d-1_47.lib + +clean : libboost_regex-bcb-s-1_47_clean libboost_regex-bcb-mt-s-1_47_clean boost_regex-bcb-mt-1_47_clean boost_regex-bcb-1_47_clean libboost_regex-bcb-mt-1_47_clean libboost_regex-bcb-1_47_clean libboost_regex-bcb-sd-1_47_clean libboost_regex-bcb-mt-sd-1_47_clean boost_regex-bcb-mt-d-1_47_clean boost_regex-bcb-d-1_47_clean libboost_regex-bcb-mt-d-1_47_clean libboost_regex-bcb-d-1_47_clean + +install : all + copy bcb\libboost_regex-bcb-s-1_47.lib $(BCROOT)\lib + copy bcb\libboost_regex-bcb-mt-s-1_47.lib $(BCROOT)\lib + copy bcb\boost_regex-bcb-mt-1_47.lib $(BCROOT)\lib + copy bcb\boost_regex-bcb-mt-1_47.dll $(BCROOT)\bin + copy bcb\boost_regex-bcb-mt-1_47.tds $(BCROOT)\bin + copy bcb\boost_regex-bcb-1_47.lib $(BCROOT)\lib + copy bcb\boost_regex-bcb-1_47.dll $(BCROOT)\bin + copy bcb\boost_regex-bcb-1_47.tds $(BCROOT)\bin + copy bcb\libboost_regex-bcb-mt-1_47.lib $(BCROOT)\lib + copy bcb\libboost_regex-bcb-1_47.lib $(BCROOT)\lib + copy bcb\libboost_regex-bcb-sd-1_47.lib $(BCROOT)\lib + copy bcb\libboost_regex-bcb-mt-sd-1_47.lib $(BCROOT)\lib + copy bcb\boost_regex-bcb-mt-d-1_47.lib $(BCROOT)\lib + copy bcb\boost_regex-bcb-mt-d-1_47.dll $(BCROOT)\bin + copy bcb\boost_regex-bcb-mt-d-1_47.tds $(BCROOT)\bin + copy bcb\boost_regex-bcb-d-1_47.lib $(BCROOT)\lib + copy bcb\boost_regex-bcb-d-1_47.dll $(BCROOT)\bin + copy bcb\boost_regex-bcb-d-1_47.tds $(BCROOT)\bin + copy bcb\libboost_regex-bcb-mt-d-1_47.lib $(BCROOT)\lib + copy bcb\libboost_regex-bcb-d-1_47.lib $(BCROOT)\lib + +bcb : + -@mkdir bcb + + +######################################################## +# +# section for libboost_regex-bcb-s-1_47.lib +# +######################################################## +bcb\libboost_regex-bcb-s-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\libboost_regex-bcb-s-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\libboost_regex-bcb-s-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\libboost_regex-bcb-s-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\libboost_regex-bcb-s-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\icu.obj ../src/icu.cpp +| + +bcb\libboost_regex-bcb-s-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\instances.obj ../src/instances.cpp +| + +bcb\libboost_regex-bcb-s-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\libboost_regex-bcb-s-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\regex.obj ../src/regex.cpp +| + +bcb\libboost_regex-bcb-s-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\libboost_regex-bcb-s-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\libboost_regex-bcb-s-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\libboost_regex-bcb-s-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\libboost_regex-bcb-s-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\libboost_regex-bcb-s-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\libboost_regex-bcb-s-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\libboost_regex-bcb-s-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\libboost_regex-bcb-s-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-s-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\libboost_regex-bcb-s-1_47 : + -@mkdir bcb\libboost_regex-bcb-s-1_47 + +libboost_regex-bcb-s-1_47_clean : + del bcb\libboost_regex-bcb-s-1_47\*.obj + del bcb\libboost_regex-bcb-s-1_47\*.il? + del bcb\libboost_regex-bcb-s-1_47\*.csm + del bcb\libboost_regex-bcb-s-1_47\*.tds + +bcb\libboost_regex-bcb-s-1_47.lib : bcb\libboost_regex-bcb-s-1_47\c_regex_traits.obj bcb\libboost_regex-bcb-s-1_47\cpp_regex_traits.obj bcb\libboost_regex-bcb-s-1_47\cregex.obj bcb\libboost_regex-bcb-s-1_47\fileiter.obj bcb\libboost_regex-bcb-s-1_47\icu.obj bcb\libboost_regex-bcb-s-1_47\instances.obj bcb\libboost_regex-bcb-s-1_47\posix_api.obj bcb\libboost_regex-bcb-s-1_47\regex.obj bcb\libboost_regex-bcb-s-1_47\regex_debug.obj bcb\libboost_regex-bcb-s-1_47\regex_raw_buffer.obj bcb\libboost_regex-bcb-s-1_47\regex_traits_defaults.obj bcb\libboost_regex-bcb-s-1_47\static_mutex.obj bcb\libboost_regex-bcb-s-1_47\usinstances.obj bcb\libboost_regex-bcb-s-1_47\w32_regex_traits.obj bcb\libboost_regex-bcb-s-1_47\wc_regex_traits.obj bcb\libboost_regex-bcb-s-1_47\wide_posix_api.obj bcb\libboost_regex-bcb-s-1_47\winstances.obj + if exist bcb\libboost_regex-bcb-s-1_47.lib del bcb\libboost_regex-bcb-s-1_47.lib + tlib @&&| +/P128 /C /u /a $(XSFLAGS) "bcb\libboost_regex-bcb-s-1_47.lib" +"bcb\libboost_regex-bcb-s-1_47\c_regex_traits.obj" +"bcb\libboost_regex-bcb-s-1_47\cpp_regex_traits.obj" +"bcb\libboost_regex-bcb-s-1_47\cregex.obj" +"bcb\libboost_regex-bcb-s-1_47\fileiter.obj" +"bcb\libboost_regex-bcb-s-1_47\icu.obj" +"bcb\libboost_regex-bcb-s-1_47\instances.obj" +"bcb\libboost_regex-bcb-s-1_47\posix_api.obj" +"bcb\libboost_regex-bcb-s-1_47\regex.obj" +"bcb\libboost_regex-bcb-s-1_47\regex_debug.obj" +"bcb\libboost_regex-bcb-s-1_47\regex_raw_buffer.obj" +"bcb\libboost_regex-bcb-s-1_47\regex_traits_defaults.obj" +"bcb\libboost_regex-bcb-s-1_47\static_mutex.obj" +"bcb\libboost_regex-bcb-s-1_47\usinstances.obj" +"bcb\libboost_regex-bcb-s-1_47\w32_regex_traits.obj" +"bcb\libboost_regex-bcb-s-1_47\wc_regex_traits.obj" +"bcb\libboost_regex-bcb-s-1_47\wide_posix_api.obj" +"bcb\libboost_regex-bcb-s-1_47\winstances.obj" +| + +######################################################## +# +# section for libboost_regex-bcb-mt-s-1_47.lib +# +######################################################## +bcb\libboost_regex-bcb-mt-s-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\icu.obj ../src/icu.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\instances.obj ../src/instances.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\regex.obj ../src/regex.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-s-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\libboost_regex-bcb-mt-s-1_47 : + -@mkdir bcb\libboost_regex-bcb-mt-s-1_47 + +libboost_regex-bcb-mt-s-1_47_clean : + del bcb\libboost_regex-bcb-mt-s-1_47\*.obj + del bcb\libboost_regex-bcb-mt-s-1_47\*.il? + del bcb\libboost_regex-bcb-mt-s-1_47\*.csm + del bcb\libboost_regex-bcb-mt-s-1_47\*.tds + +bcb\libboost_regex-bcb-mt-s-1_47.lib : bcb\libboost_regex-bcb-mt-s-1_47\c_regex_traits.obj bcb\libboost_regex-bcb-mt-s-1_47\cpp_regex_traits.obj bcb\libboost_regex-bcb-mt-s-1_47\cregex.obj bcb\libboost_regex-bcb-mt-s-1_47\fileiter.obj bcb\libboost_regex-bcb-mt-s-1_47\icu.obj bcb\libboost_regex-bcb-mt-s-1_47\instances.obj bcb\libboost_regex-bcb-mt-s-1_47\posix_api.obj bcb\libboost_regex-bcb-mt-s-1_47\regex.obj bcb\libboost_regex-bcb-mt-s-1_47\regex_debug.obj bcb\libboost_regex-bcb-mt-s-1_47\regex_raw_buffer.obj bcb\libboost_regex-bcb-mt-s-1_47\regex_traits_defaults.obj bcb\libboost_regex-bcb-mt-s-1_47\static_mutex.obj bcb\libboost_regex-bcb-mt-s-1_47\usinstances.obj bcb\libboost_regex-bcb-mt-s-1_47\w32_regex_traits.obj bcb\libboost_regex-bcb-mt-s-1_47\wc_regex_traits.obj bcb\libboost_regex-bcb-mt-s-1_47\wide_posix_api.obj bcb\libboost_regex-bcb-mt-s-1_47\winstances.obj + if exist bcb\libboost_regex-bcb-mt-s-1_47.lib del bcb\libboost_regex-bcb-mt-s-1_47.lib + tlib @&&| +/P128 /C /u /a $(XSFLAGS) "bcb\libboost_regex-bcb-mt-s-1_47.lib" +"bcb\libboost_regex-bcb-mt-s-1_47\c_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\cpp_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\cregex.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\fileiter.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\icu.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\instances.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\posix_api.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\regex.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\regex_debug.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\regex_raw_buffer.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\regex_traits_defaults.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\static_mutex.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\usinstances.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\w32_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\wc_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\wide_posix_api.obj" +"bcb\libboost_regex-bcb-mt-s-1_47\winstances.obj" +| + +######################################################## +# +# section for boost_regex-bcb-mt-1_47.lib +# +######################################################## +bcb\boost_regex-bcb-mt-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\boost_regex-bcb-mt-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\boost_regex-bcb-mt-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\boost_regex-bcb-mt-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\boost_regex-bcb-mt-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\icu.obj ../src/icu.cpp +| + +bcb\boost_regex-bcb-mt-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\instances.obj ../src/instances.cpp +| + +bcb\boost_regex-bcb-mt-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\boost_regex-bcb-mt-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\regex.obj ../src/regex.cpp +| + +bcb\boost_regex-bcb-mt-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\boost_regex-bcb-mt-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\boost_regex-bcb-mt-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\boost_regex-bcb-mt-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\boost_regex-bcb-mt-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\boost_regex-bcb-mt-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\boost_regex-bcb-mt-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\boost_regex-bcb-mt-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\boost_regex-bcb-mt-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\boost_regex-bcb-mt-1_47 : + -@mkdir bcb\boost_regex-bcb-mt-1_47 + +boost_regex-bcb-mt-1_47_clean : + del bcb\boost_regex-bcb-mt-1_47\*.obj + del bcb\boost_regex-bcb-mt-1_47\*.il? + del bcb\boost_regex-bcb-mt-1_47\*.csm + del bcb\boost_regex-bcb-mt-1_47\*.tds + del bcb\*.tds + +bcb\boost_regex-bcb-mt-1_47.lib : bcb\boost_regex-bcb-mt-1_47\c_regex_traits.obj bcb\boost_regex-bcb-mt-1_47\cpp_regex_traits.obj bcb\boost_regex-bcb-mt-1_47\cregex.obj bcb\boost_regex-bcb-mt-1_47\fileiter.obj bcb\boost_regex-bcb-mt-1_47\icu.obj bcb\boost_regex-bcb-mt-1_47\instances.obj bcb\boost_regex-bcb-mt-1_47\posix_api.obj bcb\boost_regex-bcb-mt-1_47\regex.obj bcb\boost_regex-bcb-mt-1_47\regex_debug.obj bcb\boost_regex-bcb-mt-1_47\regex_raw_buffer.obj bcb\boost_regex-bcb-mt-1_47\regex_traits_defaults.obj bcb\boost_regex-bcb-mt-1_47\static_mutex.obj bcb\boost_regex-bcb-mt-1_47\usinstances.obj bcb\boost_regex-bcb-mt-1_47\w32_regex_traits.obj bcb\boost_regex-bcb-mt-1_47\wc_regex_traits.obj bcb\boost_regex-bcb-mt-1_47\wide_posix_api.obj bcb\boost_regex-bcb-mt-1_47\winstances.obj + bcc32 @&&| +-lw-dup -lw-dpl -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; -ebcb\boost_regex-bcb-mt-1_47.dll $(XLFLAGS) bcb\boost_regex-bcb-mt-1_47\c_regex_traits.obj bcb\boost_regex-bcb-mt-1_47\cpp_regex_traits.obj bcb\boost_regex-bcb-mt-1_47\cregex.obj bcb\boost_regex-bcb-mt-1_47\fileiter.obj bcb\boost_regex-bcb-mt-1_47\icu.obj bcb\boost_regex-bcb-mt-1_47\instances.obj bcb\boost_regex-bcb-mt-1_47\posix_api.obj bcb\boost_regex-bcb-mt-1_47\regex.obj bcb\boost_regex-bcb-mt-1_47\regex_debug.obj bcb\boost_regex-bcb-mt-1_47\regex_raw_buffer.obj bcb\boost_regex-bcb-mt-1_47\regex_traits_defaults.obj bcb\boost_regex-bcb-mt-1_47\static_mutex.obj bcb\boost_regex-bcb-mt-1_47\usinstances.obj bcb\boost_regex-bcb-mt-1_47\w32_regex_traits.obj bcb\boost_regex-bcb-mt-1_47\wc_regex_traits.obj bcb\boost_regex-bcb-mt-1_47\wide_posix_api.obj bcb\boost_regex-bcb-mt-1_47\winstances.obj $(LIBS) +| + implib -w bcb\boost_regex-bcb-mt-1_47.lib bcb\boost_regex-bcb-mt-1_47.dll + +######################################################## +# +# section for boost_regex-bcb-1_47.lib +# +######################################################## +bcb\boost_regex-bcb-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\boost_regex-bcb-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\boost_regex-bcb-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\boost_regex-bcb-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\boost_regex-bcb-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\icu.obj ../src/icu.cpp +| + +bcb\boost_regex-bcb-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\instances.obj ../src/instances.cpp +| + +bcb\boost_regex-bcb-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\boost_regex-bcb-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\regex.obj ../src/regex.cpp +| + +bcb\boost_regex-bcb-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\boost_regex-bcb-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\boost_regex-bcb-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\boost_regex-bcb-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\boost_regex-bcb-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\boost_regex-bcb-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\boost_regex-bcb-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\boost_regex-bcb-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\boost_regex-bcb-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\boost_regex-bcb-1_47 : + -@mkdir bcb\boost_regex-bcb-1_47 + +boost_regex-bcb-1_47_clean : + del bcb\boost_regex-bcb-1_47\*.obj + del bcb\boost_regex-bcb-1_47\*.il? + del bcb\boost_regex-bcb-1_47\*.csm + del bcb\boost_regex-bcb-1_47\*.tds + del bcb\*.tds + +bcb\boost_regex-bcb-1_47.lib : bcb\boost_regex-bcb-1_47\c_regex_traits.obj bcb\boost_regex-bcb-1_47\cpp_regex_traits.obj bcb\boost_regex-bcb-1_47\cregex.obj bcb\boost_regex-bcb-1_47\fileiter.obj bcb\boost_regex-bcb-1_47\icu.obj bcb\boost_regex-bcb-1_47\instances.obj bcb\boost_regex-bcb-1_47\posix_api.obj bcb\boost_regex-bcb-1_47\regex.obj bcb\boost_regex-bcb-1_47\regex_debug.obj bcb\boost_regex-bcb-1_47\regex_raw_buffer.obj bcb\boost_regex-bcb-1_47\regex_traits_defaults.obj bcb\boost_regex-bcb-1_47\static_mutex.obj bcb\boost_regex-bcb-1_47\usinstances.obj bcb\boost_regex-bcb-1_47\w32_regex_traits.obj bcb\boost_regex-bcb-1_47\wc_regex_traits.obj bcb\boost_regex-bcb-1_47\wide_posix_api.obj bcb\boost_regex-bcb-1_47\winstances.obj + bcc32 @&&| +-lw-dup -lw-dpl -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; -ebcb\boost_regex-bcb-1_47.dll $(XLFLAGS) bcb\boost_regex-bcb-1_47\c_regex_traits.obj bcb\boost_regex-bcb-1_47\cpp_regex_traits.obj bcb\boost_regex-bcb-1_47\cregex.obj bcb\boost_regex-bcb-1_47\fileiter.obj bcb\boost_regex-bcb-1_47\icu.obj bcb\boost_regex-bcb-1_47\instances.obj bcb\boost_regex-bcb-1_47\posix_api.obj bcb\boost_regex-bcb-1_47\regex.obj bcb\boost_regex-bcb-1_47\regex_debug.obj bcb\boost_regex-bcb-1_47\regex_raw_buffer.obj bcb\boost_regex-bcb-1_47\regex_traits_defaults.obj bcb\boost_regex-bcb-1_47\static_mutex.obj bcb\boost_regex-bcb-1_47\usinstances.obj bcb\boost_regex-bcb-1_47\w32_regex_traits.obj bcb\boost_regex-bcb-1_47\wc_regex_traits.obj bcb\boost_regex-bcb-1_47\wide_posix_api.obj bcb\boost_regex-bcb-1_47\winstances.obj $(LIBS) +| + implib -w bcb\boost_regex-bcb-1_47.lib bcb\boost_regex-bcb-1_47.dll + +######################################################## +# +# section for libboost_regex-bcb-mt-1_47.lib +# +######################################################## +bcb\libboost_regex-bcb-mt-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\icu.obj ../src/icu.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\instances.obj ../src/instances.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\regex.obj ../src/regex.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\libboost_regex-bcb-mt-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\libboost_regex-bcb-mt-1_47 : + -@mkdir bcb\libboost_regex-bcb-mt-1_47 + +libboost_regex-bcb-mt-1_47_clean : + del bcb\libboost_regex-bcb-mt-1_47\*.obj + del bcb\libboost_regex-bcb-mt-1_47\*.il? + del bcb\libboost_regex-bcb-mt-1_47\*.csm + del bcb\libboost_regex-bcb-mt-1_47\*.tds + +bcb\libboost_regex-bcb-mt-1_47.lib : bcb\libboost_regex-bcb-mt-1_47\c_regex_traits.obj bcb\libboost_regex-bcb-mt-1_47\cpp_regex_traits.obj bcb\libboost_regex-bcb-mt-1_47\cregex.obj bcb\libboost_regex-bcb-mt-1_47\fileiter.obj bcb\libboost_regex-bcb-mt-1_47\icu.obj bcb\libboost_regex-bcb-mt-1_47\instances.obj bcb\libboost_regex-bcb-mt-1_47\posix_api.obj bcb\libboost_regex-bcb-mt-1_47\regex.obj bcb\libboost_regex-bcb-mt-1_47\regex_debug.obj bcb\libboost_regex-bcb-mt-1_47\regex_raw_buffer.obj bcb\libboost_regex-bcb-mt-1_47\regex_traits_defaults.obj bcb\libboost_regex-bcb-mt-1_47\static_mutex.obj bcb\libboost_regex-bcb-mt-1_47\usinstances.obj bcb\libboost_regex-bcb-mt-1_47\w32_regex_traits.obj bcb\libboost_regex-bcb-mt-1_47\wc_regex_traits.obj bcb\libboost_regex-bcb-mt-1_47\wide_posix_api.obj bcb\libboost_regex-bcb-mt-1_47\winstances.obj + if exist bcb\libboost_regex-bcb-mt-1_47.lib del bcb\libboost_regex-bcb-mt-1_47.lib + tlib @&&| +/P128 /C /u /a $(XSFLAGS) "bcb\libboost_regex-bcb-mt-1_47.lib" +"bcb\libboost_regex-bcb-mt-1_47\c_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-1_47\cpp_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-1_47\cregex.obj" +"bcb\libboost_regex-bcb-mt-1_47\fileiter.obj" +"bcb\libboost_regex-bcb-mt-1_47\icu.obj" +"bcb\libboost_regex-bcb-mt-1_47\instances.obj" +"bcb\libboost_regex-bcb-mt-1_47\posix_api.obj" +"bcb\libboost_regex-bcb-mt-1_47\regex.obj" +"bcb\libboost_regex-bcb-mt-1_47\regex_debug.obj" +"bcb\libboost_regex-bcb-mt-1_47\regex_raw_buffer.obj" +"bcb\libboost_regex-bcb-mt-1_47\regex_traits_defaults.obj" +"bcb\libboost_regex-bcb-mt-1_47\static_mutex.obj" +"bcb\libboost_regex-bcb-mt-1_47\usinstances.obj" +"bcb\libboost_regex-bcb-mt-1_47\w32_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-1_47\wc_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-1_47\wide_posix_api.obj" +"bcb\libboost_regex-bcb-mt-1_47\winstances.obj" +| + +######################################################## +# +# section for libboost_regex-bcb-1_47.lib +# +######################################################## +bcb\libboost_regex-bcb-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\libboost_regex-bcb-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\libboost_regex-bcb-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\libboost_regex-bcb-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\libboost_regex-bcb-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\icu.obj ../src/icu.cpp +| + +bcb\libboost_regex-bcb-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\instances.obj ../src/instances.cpp +| + +bcb\libboost_regex-bcb-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\libboost_regex-bcb-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\regex.obj ../src/regex.cpp +| + +bcb\libboost_regex-bcb-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\libboost_regex-bcb-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\libboost_regex-bcb-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\libboost_regex-bcb-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\libboost_regex-bcb-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\libboost_regex-bcb-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\libboost_regex-bcb-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\libboost_regex-bcb-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\libboost_regex-bcb-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -O2 -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\libboost_regex-bcb-1_47 : + -@mkdir bcb\libboost_regex-bcb-1_47 + +libboost_regex-bcb-1_47_clean : + del bcb\libboost_regex-bcb-1_47\*.obj + del bcb\libboost_regex-bcb-1_47\*.il? + del bcb\libboost_regex-bcb-1_47\*.csm + del bcb\libboost_regex-bcb-1_47\*.tds + +bcb\libboost_regex-bcb-1_47.lib : bcb\libboost_regex-bcb-1_47\c_regex_traits.obj bcb\libboost_regex-bcb-1_47\cpp_regex_traits.obj bcb\libboost_regex-bcb-1_47\cregex.obj bcb\libboost_regex-bcb-1_47\fileiter.obj bcb\libboost_regex-bcb-1_47\icu.obj bcb\libboost_regex-bcb-1_47\instances.obj bcb\libboost_regex-bcb-1_47\posix_api.obj bcb\libboost_regex-bcb-1_47\regex.obj bcb\libboost_regex-bcb-1_47\regex_debug.obj bcb\libboost_regex-bcb-1_47\regex_raw_buffer.obj bcb\libboost_regex-bcb-1_47\regex_traits_defaults.obj bcb\libboost_regex-bcb-1_47\static_mutex.obj bcb\libboost_regex-bcb-1_47\usinstances.obj bcb\libboost_regex-bcb-1_47\w32_regex_traits.obj bcb\libboost_regex-bcb-1_47\wc_regex_traits.obj bcb\libboost_regex-bcb-1_47\wide_posix_api.obj bcb\libboost_regex-bcb-1_47\winstances.obj + if exist bcb\libboost_regex-bcb-1_47.lib del bcb\libboost_regex-bcb-1_47.lib + tlib @&&| +/P128 /C /u /a $(XSFLAGS) "bcb\libboost_regex-bcb-1_47.lib" +"bcb\libboost_regex-bcb-1_47\c_regex_traits.obj" +"bcb\libboost_regex-bcb-1_47\cpp_regex_traits.obj" +"bcb\libboost_regex-bcb-1_47\cregex.obj" +"bcb\libboost_regex-bcb-1_47\fileiter.obj" +"bcb\libboost_regex-bcb-1_47\icu.obj" +"bcb\libboost_regex-bcb-1_47\instances.obj" +"bcb\libboost_regex-bcb-1_47\posix_api.obj" +"bcb\libboost_regex-bcb-1_47\regex.obj" +"bcb\libboost_regex-bcb-1_47\regex_debug.obj" +"bcb\libboost_regex-bcb-1_47\regex_raw_buffer.obj" +"bcb\libboost_regex-bcb-1_47\regex_traits_defaults.obj" +"bcb\libboost_regex-bcb-1_47\static_mutex.obj" +"bcb\libboost_regex-bcb-1_47\usinstances.obj" +"bcb\libboost_regex-bcb-1_47\w32_regex_traits.obj" +"bcb\libboost_regex-bcb-1_47\wc_regex_traits.obj" +"bcb\libboost_regex-bcb-1_47\wide_posix_api.obj" +"bcb\libboost_regex-bcb-1_47\winstances.obj" +| + +######################################################## +# +# section for libboost_regex-bcb-sd-1_47.lib +# +######################################################## +bcb\libboost_regex-bcb-sd-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\icu.obj ../src/icu.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\instances.obj ../src/instances.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\regex.obj ../src/regex.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\libboost_regex-bcb-sd-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM- -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8037 -w-8057 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-sd-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\libboost_regex-bcb-sd-1_47 : + -@mkdir bcb\libboost_regex-bcb-sd-1_47 + +libboost_regex-bcb-sd-1_47_clean : + del bcb\libboost_regex-bcb-sd-1_47\*.obj + del bcb\libboost_regex-bcb-sd-1_47\*.il? + del bcb\libboost_regex-bcb-sd-1_47\*.csm + del bcb\libboost_regex-bcb-sd-1_47\*.tds + +bcb\libboost_regex-bcb-sd-1_47.lib : bcb\libboost_regex-bcb-sd-1_47\c_regex_traits.obj bcb\libboost_regex-bcb-sd-1_47\cpp_regex_traits.obj bcb\libboost_regex-bcb-sd-1_47\cregex.obj bcb\libboost_regex-bcb-sd-1_47\fileiter.obj bcb\libboost_regex-bcb-sd-1_47\icu.obj bcb\libboost_regex-bcb-sd-1_47\instances.obj bcb\libboost_regex-bcb-sd-1_47\posix_api.obj bcb\libboost_regex-bcb-sd-1_47\regex.obj bcb\libboost_regex-bcb-sd-1_47\regex_debug.obj bcb\libboost_regex-bcb-sd-1_47\regex_raw_buffer.obj bcb\libboost_regex-bcb-sd-1_47\regex_traits_defaults.obj bcb\libboost_regex-bcb-sd-1_47\static_mutex.obj bcb\libboost_regex-bcb-sd-1_47\usinstances.obj bcb\libboost_regex-bcb-sd-1_47\w32_regex_traits.obj bcb\libboost_regex-bcb-sd-1_47\wc_regex_traits.obj bcb\libboost_regex-bcb-sd-1_47\wide_posix_api.obj bcb\libboost_regex-bcb-sd-1_47\winstances.obj + if exist bcb\libboost_regex-bcb-sd-1_47.lib del bcb\libboost_regex-bcb-sd-1_47.lib + tlib @&&| +/P128 /C /u /a $(XSFLAGS) "bcb\libboost_regex-bcb-sd-1_47.lib" +"bcb\libboost_regex-bcb-sd-1_47\c_regex_traits.obj" +"bcb\libboost_regex-bcb-sd-1_47\cpp_regex_traits.obj" +"bcb\libboost_regex-bcb-sd-1_47\cregex.obj" +"bcb\libboost_regex-bcb-sd-1_47\fileiter.obj" +"bcb\libboost_regex-bcb-sd-1_47\icu.obj" +"bcb\libboost_regex-bcb-sd-1_47\instances.obj" +"bcb\libboost_regex-bcb-sd-1_47\posix_api.obj" +"bcb\libboost_regex-bcb-sd-1_47\regex.obj" +"bcb\libboost_regex-bcb-sd-1_47\regex_debug.obj" +"bcb\libboost_regex-bcb-sd-1_47\regex_raw_buffer.obj" +"bcb\libboost_regex-bcb-sd-1_47\regex_traits_defaults.obj" +"bcb\libboost_regex-bcb-sd-1_47\static_mutex.obj" +"bcb\libboost_regex-bcb-sd-1_47\usinstances.obj" +"bcb\libboost_regex-bcb-sd-1_47\w32_regex_traits.obj" +"bcb\libboost_regex-bcb-sd-1_47\wc_regex_traits.obj" +"bcb\libboost_regex-bcb-sd-1_47\wide_posix_api.obj" +"bcb\libboost_regex-bcb-sd-1_47\winstances.obj" +| + +######################################################## +# +# section for libboost_regex-bcb-mt-sd-1_47.lib +# +######################################################## +bcb\libboost_regex-bcb-mt-sd-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\icu.obj ../src/icu.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\instances.obj ../src/instances.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\regex.obj ../src/regex.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWM -D_NO_VCL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-sd-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\libboost_regex-bcb-mt-sd-1_47 : + -@mkdir bcb\libboost_regex-bcb-mt-sd-1_47 + +libboost_regex-bcb-mt-sd-1_47_clean : + del bcb\libboost_regex-bcb-mt-sd-1_47\*.obj + del bcb\libboost_regex-bcb-mt-sd-1_47\*.il? + del bcb\libboost_regex-bcb-mt-sd-1_47\*.csm + del bcb\libboost_regex-bcb-mt-sd-1_47\*.tds + +bcb\libboost_regex-bcb-mt-sd-1_47.lib : bcb\libboost_regex-bcb-mt-sd-1_47\c_regex_traits.obj bcb\libboost_regex-bcb-mt-sd-1_47\cpp_regex_traits.obj bcb\libboost_regex-bcb-mt-sd-1_47\cregex.obj bcb\libboost_regex-bcb-mt-sd-1_47\fileiter.obj bcb\libboost_regex-bcb-mt-sd-1_47\icu.obj bcb\libboost_regex-bcb-mt-sd-1_47\instances.obj bcb\libboost_regex-bcb-mt-sd-1_47\posix_api.obj bcb\libboost_regex-bcb-mt-sd-1_47\regex.obj bcb\libboost_regex-bcb-mt-sd-1_47\regex_debug.obj bcb\libboost_regex-bcb-mt-sd-1_47\regex_raw_buffer.obj bcb\libboost_regex-bcb-mt-sd-1_47\regex_traits_defaults.obj bcb\libboost_regex-bcb-mt-sd-1_47\static_mutex.obj bcb\libboost_regex-bcb-mt-sd-1_47\usinstances.obj bcb\libboost_regex-bcb-mt-sd-1_47\w32_regex_traits.obj bcb\libboost_regex-bcb-mt-sd-1_47\wc_regex_traits.obj bcb\libboost_regex-bcb-mt-sd-1_47\wide_posix_api.obj bcb\libboost_regex-bcb-mt-sd-1_47\winstances.obj + if exist bcb\libboost_regex-bcb-mt-sd-1_47.lib del bcb\libboost_regex-bcb-mt-sd-1_47.lib + tlib @&&| +/P128 /C /u /a $(XSFLAGS) "bcb\libboost_regex-bcb-mt-sd-1_47.lib" +"bcb\libboost_regex-bcb-mt-sd-1_47\c_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\cpp_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\cregex.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\fileiter.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\icu.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\instances.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\posix_api.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\regex.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\regex_debug.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\regex_raw_buffer.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\regex_traits_defaults.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\static_mutex.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\usinstances.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\w32_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\wc_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\wide_posix_api.obj" +"bcb\libboost_regex-bcb-mt-sd-1_47\winstances.obj" +| + +######################################################## +# +# section for boost_regex-bcb-mt-d-1_47.lib +# +######################################################## +bcb\boost_regex-bcb-mt-d-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\icu.obj ../src/icu.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\instances.obj ../src/instances.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\regex.obj ../src/regex.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-mt-d-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\boost_regex-bcb-mt-d-1_47 : + -@mkdir bcb\boost_regex-bcb-mt-d-1_47 + +boost_regex-bcb-mt-d-1_47_clean : + del bcb\boost_regex-bcb-mt-d-1_47\*.obj + del bcb\boost_regex-bcb-mt-d-1_47\*.il? + del bcb\boost_regex-bcb-mt-d-1_47\*.csm + del bcb\boost_regex-bcb-mt-d-1_47\*.tds + del bcb\*.tds + +bcb\boost_regex-bcb-mt-d-1_47.lib : bcb\boost_regex-bcb-mt-d-1_47\c_regex_traits.obj bcb\boost_regex-bcb-mt-d-1_47\cpp_regex_traits.obj bcb\boost_regex-bcb-mt-d-1_47\cregex.obj bcb\boost_regex-bcb-mt-d-1_47\fileiter.obj bcb\boost_regex-bcb-mt-d-1_47\icu.obj bcb\boost_regex-bcb-mt-d-1_47\instances.obj bcb\boost_regex-bcb-mt-d-1_47\posix_api.obj bcb\boost_regex-bcb-mt-d-1_47\regex.obj bcb\boost_regex-bcb-mt-d-1_47\regex_debug.obj bcb\boost_regex-bcb-mt-d-1_47\regex_raw_buffer.obj bcb\boost_regex-bcb-mt-d-1_47\regex_traits_defaults.obj bcb\boost_regex-bcb-mt-d-1_47\static_mutex.obj bcb\boost_regex-bcb-mt-d-1_47\usinstances.obj bcb\boost_regex-bcb-mt-d-1_47\w32_regex_traits.obj bcb\boost_regex-bcb-mt-d-1_47\wc_regex_traits.obj bcb\boost_regex-bcb-mt-d-1_47\wide_posix_api.obj bcb\boost_regex-bcb-mt-d-1_47\winstances.obj + bcc32 @&&| +-lw-dup -lw-dpl -tWD -tWM -tWR -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; -ebcb\boost_regex-bcb-mt-d-1_47.dll $(XLFLAGS) bcb\boost_regex-bcb-mt-d-1_47\c_regex_traits.obj bcb\boost_regex-bcb-mt-d-1_47\cpp_regex_traits.obj bcb\boost_regex-bcb-mt-d-1_47\cregex.obj bcb\boost_regex-bcb-mt-d-1_47\fileiter.obj bcb\boost_regex-bcb-mt-d-1_47\icu.obj bcb\boost_regex-bcb-mt-d-1_47\instances.obj bcb\boost_regex-bcb-mt-d-1_47\posix_api.obj bcb\boost_regex-bcb-mt-d-1_47\regex.obj bcb\boost_regex-bcb-mt-d-1_47\regex_debug.obj bcb\boost_regex-bcb-mt-d-1_47\regex_raw_buffer.obj bcb\boost_regex-bcb-mt-d-1_47\regex_traits_defaults.obj bcb\boost_regex-bcb-mt-d-1_47\static_mutex.obj bcb\boost_regex-bcb-mt-d-1_47\usinstances.obj bcb\boost_regex-bcb-mt-d-1_47\w32_regex_traits.obj bcb\boost_regex-bcb-mt-d-1_47\wc_regex_traits.obj bcb\boost_regex-bcb-mt-d-1_47\wide_posix_api.obj bcb\boost_regex-bcb-mt-d-1_47\winstances.obj $(LIBS) +| + implib -w bcb\boost_regex-bcb-mt-d-1_47.lib bcb\boost_regex-bcb-mt-d-1_47.dll + +######################################################## +# +# section for boost_regex-bcb-d-1_47.lib +# +######################################################## +bcb\boost_regex-bcb-d-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\boost_regex-bcb-d-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\boost_regex-bcb-d-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\boost_regex-bcb-d-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\boost_regex-bcb-d-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\icu.obj ../src/icu.cpp +| + +bcb\boost_regex-bcb-d-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\instances.obj ../src/instances.cpp +| + +bcb\boost_regex-bcb-d-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\boost_regex-bcb-d-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\regex.obj ../src/regex.cpp +| + +bcb\boost_regex-bcb-d-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\boost_regex-bcb-d-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\boost_regex-bcb-d-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\boost_regex-bcb-d-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\boost_regex-bcb-d-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\boost_regex-bcb-d-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\boost_regex-bcb-d-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\boost_regex-bcb-d-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\boost_regex-bcb-d-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -DBOOST_REGEX_DYN_LINK -obcb\boost_regex-bcb-d-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\boost_regex-bcb-d-1_47 : + -@mkdir bcb\boost_regex-bcb-d-1_47 + +boost_regex-bcb-d-1_47_clean : + del bcb\boost_regex-bcb-d-1_47\*.obj + del bcb\boost_regex-bcb-d-1_47\*.il? + del bcb\boost_regex-bcb-d-1_47\*.csm + del bcb\boost_regex-bcb-d-1_47\*.tds + del bcb\*.tds + +bcb\boost_regex-bcb-d-1_47.lib : bcb\boost_regex-bcb-d-1_47\c_regex_traits.obj bcb\boost_regex-bcb-d-1_47\cpp_regex_traits.obj bcb\boost_regex-bcb-d-1_47\cregex.obj bcb\boost_regex-bcb-d-1_47\fileiter.obj bcb\boost_regex-bcb-d-1_47\icu.obj bcb\boost_regex-bcb-d-1_47\instances.obj bcb\boost_regex-bcb-d-1_47\posix_api.obj bcb\boost_regex-bcb-d-1_47\regex.obj bcb\boost_regex-bcb-d-1_47\regex_debug.obj bcb\boost_regex-bcb-d-1_47\regex_raw_buffer.obj bcb\boost_regex-bcb-d-1_47\regex_traits_defaults.obj bcb\boost_regex-bcb-d-1_47\static_mutex.obj bcb\boost_regex-bcb-d-1_47\usinstances.obj bcb\boost_regex-bcb-d-1_47\w32_regex_traits.obj bcb\boost_regex-bcb-d-1_47\wc_regex_traits.obj bcb\boost_regex-bcb-d-1_47\wide_posix_api.obj bcb\boost_regex-bcb-d-1_47\winstances.obj + bcc32 @&&| +-lw-dup -lw-dpl -tWD -tWR -tWM- -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; -ebcb\boost_regex-bcb-d-1_47.dll $(XLFLAGS) bcb\boost_regex-bcb-d-1_47\c_regex_traits.obj bcb\boost_regex-bcb-d-1_47\cpp_regex_traits.obj bcb\boost_regex-bcb-d-1_47\cregex.obj bcb\boost_regex-bcb-d-1_47\fileiter.obj bcb\boost_regex-bcb-d-1_47\icu.obj bcb\boost_regex-bcb-d-1_47\instances.obj bcb\boost_regex-bcb-d-1_47\posix_api.obj bcb\boost_regex-bcb-d-1_47\regex.obj bcb\boost_regex-bcb-d-1_47\regex_debug.obj bcb\boost_regex-bcb-d-1_47\regex_raw_buffer.obj bcb\boost_regex-bcb-d-1_47\regex_traits_defaults.obj bcb\boost_regex-bcb-d-1_47\static_mutex.obj bcb\boost_regex-bcb-d-1_47\usinstances.obj bcb\boost_regex-bcb-d-1_47\w32_regex_traits.obj bcb\boost_regex-bcb-d-1_47\wc_regex_traits.obj bcb\boost_regex-bcb-d-1_47\wide_posix_api.obj bcb\boost_regex-bcb-d-1_47\winstances.obj $(LIBS) +| + implib -w bcb\boost_regex-bcb-d-1_47.lib bcb\boost_regex-bcb-d-1_47.dll + +######################################################## +# +# section for libboost_regex-bcb-mt-d-1_47.lib +# +######################################################## +bcb\libboost_regex-bcb-mt-d-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\icu.obj ../src/icu.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\instances.obj ../src/instances.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\regex.obj ../src/regex.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWM -tWR -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-mt-d-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\libboost_regex-bcb-mt-d-1_47 : + -@mkdir bcb\libboost_regex-bcb-mt-d-1_47 + +libboost_regex-bcb-mt-d-1_47_clean : + del bcb\libboost_regex-bcb-mt-d-1_47\*.obj + del bcb\libboost_regex-bcb-mt-d-1_47\*.il? + del bcb\libboost_regex-bcb-mt-d-1_47\*.csm + del bcb\libboost_regex-bcb-mt-d-1_47\*.tds + +bcb\libboost_regex-bcb-mt-d-1_47.lib : bcb\libboost_regex-bcb-mt-d-1_47\c_regex_traits.obj bcb\libboost_regex-bcb-mt-d-1_47\cpp_regex_traits.obj bcb\libboost_regex-bcb-mt-d-1_47\cregex.obj bcb\libboost_regex-bcb-mt-d-1_47\fileiter.obj bcb\libboost_regex-bcb-mt-d-1_47\icu.obj bcb\libboost_regex-bcb-mt-d-1_47\instances.obj bcb\libboost_regex-bcb-mt-d-1_47\posix_api.obj bcb\libboost_regex-bcb-mt-d-1_47\regex.obj bcb\libboost_regex-bcb-mt-d-1_47\regex_debug.obj bcb\libboost_regex-bcb-mt-d-1_47\regex_raw_buffer.obj bcb\libboost_regex-bcb-mt-d-1_47\regex_traits_defaults.obj bcb\libboost_regex-bcb-mt-d-1_47\static_mutex.obj bcb\libboost_regex-bcb-mt-d-1_47\usinstances.obj bcb\libboost_regex-bcb-mt-d-1_47\w32_regex_traits.obj bcb\libboost_regex-bcb-mt-d-1_47\wc_regex_traits.obj bcb\libboost_regex-bcb-mt-d-1_47\wide_posix_api.obj bcb\libboost_regex-bcb-mt-d-1_47\winstances.obj + if exist bcb\libboost_regex-bcb-mt-d-1_47.lib del bcb\libboost_regex-bcb-mt-d-1_47.lib + tlib @&&| +/P128 /C /u /a $(XSFLAGS) "bcb\libboost_regex-bcb-mt-d-1_47.lib" +"bcb\libboost_regex-bcb-mt-d-1_47\c_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\cpp_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\cregex.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\fileiter.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\icu.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\instances.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\posix_api.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\regex.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\regex_debug.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\regex_raw_buffer.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\regex_traits_defaults.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\static_mutex.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\usinstances.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\w32_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\wc_regex_traits.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\wide_posix_api.obj" +"bcb\libboost_regex-bcb-mt-d-1_47\winstances.obj" +| + +######################################################## +# +# section for libboost_regex-bcb-d-1_47.lib +# +######################################################## +bcb\libboost_regex-bcb-d-1_47\c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\c_regex_traits.obj ../src/c_regex_traits.cpp +| + +bcb\libboost_regex-bcb-d-1_47\cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\cpp_regex_traits.obj ../src/cpp_regex_traits.cpp +| + +bcb\libboost_regex-bcb-d-1_47\cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\cregex.obj ../src/cregex.cpp +| + +bcb\libboost_regex-bcb-d-1_47\fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\fileiter.obj ../src/fileiter.cpp +| + +bcb\libboost_regex-bcb-d-1_47\icu.obj: ../src/icu.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\icu.obj ../src/icu.cpp +| + +bcb\libboost_regex-bcb-d-1_47\instances.obj: ../src/instances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\instances.obj ../src/instances.cpp +| + +bcb\libboost_regex-bcb-d-1_47\posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\posix_api.obj ../src/posix_api.cpp +| + +bcb\libboost_regex-bcb-d-1_47\regex.obj: ../src/regex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\regex.obj ../src/regex.cpp +| + +bcb\libboost_regex-bcb-d-1_47\regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\regex_debug.obj ../src/regex_debug.cpp +| + +bcb\libboost_regex-bcb-d-1_47\regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\regex_raw_buffer.obj ../src/regex_raw_buffer.cpp +| + +bcb\libboost_regex-bcb-d-1_47\regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\regex_traits_defaults.obj ../src/regex_traits_defaults.cpp +| + +bcb\libboost_regex-bcb-d-1_47\static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\static_mutex.obj ../src/static_mutex.cpp +| + +bcb\libboost_regex-bcb-d-1_47\usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\usinstances.obj ../src/usinstances.cpp +| + +bcb\libboost_regex-bcb-d-1_47\w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\w32_regex_traits.obj ../src/w32_regex_traits.cpp +| + +bcb\libboost_regex-bcb-d-1_47\wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\wc_regex_traits.obj ../src/wc_regex_traits.cpp +| + +bcb\libboost_regex-bcb-d-1_47\wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\wide_posix_api.obj ../src/wide_posix_api.cpp +| + +bcb\libboost_regex-bcb-d-1_47\winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + bcc32 @&&| +-c $(INCLUDES) -tWD -tWR -tWM- -DBOOST_REGEX_STATIC_LINK -D_NO_VCL -D_RTLDLL -v -Ve -Vx -w-inl -w-aus -w-rch -w-8012 -w-8057 -w-8037 -DSTRICT; -I$(BCROOT)\include;../../../ -L$(BCROOT)\lib;$(BCROOT)\lib\release; $(CXXFLAGS) -obcb\libboost_regex-bcb-d-1_47\winstances.obj ../src/winstances.cpp +| + +bcb\libboost_regex-bcb-d-1_47 : + -@mkdir bcb\libboost_regex-bcb-d-1_47 + +libboost_regex-bcb-d-1_47_clean : + del bcb\libboost_regex-bcb-d-1_47\*.obj + del bcb\libboost_regex-bcb-d-1_47\*.il? + del bcb\libboost_regex-bcb-d-1_47\*.csm + del bcb\libboost_regex-bcb-d-1_47\*.tds + +bcb\libboost_regex-bcb-d-1_47.lib : bcb\libboost_regex-bcb-d-1_47\c_regex_traits.obj bcb\libboost_regex-bcb-d-1_47\cpp_regex_traits.obj bcb\libboost_regex-bcb-d-1_47\cregex.obj bcb\libboost_regex-bcb-d-1_47\fileiter.obj bcb\libboost_regex-bcb-d-1_47\icu.obj bcb\libboost_regex-bcb-d-1_47\instances.obj bcb\libboost_regex-bcb-d-1_47\posix_api.obj bcb\libboost_regex-bcb-d-1_47\regex.obj bcb\libboost_regex-bcb-d-1_47\regex_debug.obj bcb\libboost_regex-bcb-d-1_47\regex_raw_buffer.obj bcb\libboost_regex-bcb-d-1_47\regex_traits_defaults.obj bcb\libboost_regex-bcb-d-1_47\static_mutex.obj bcb\libboost_regex-bcb-d-1_47\usinstances.obj bcb\libboost_regex-bcb-d-1_47\w32_regex_traits.obj bcb\libboost_regex-bcb-d-1_47\wc_regex_traits.obj bcb\libboost_regex-bcb-d-1_47\wide_posix_api.obj bcb\libboost_regex-bcb-d-1_47\winstances.obj + if exist bcb\libboost_regex-bcb-d-1_47.lib del bcb\libboost_regex-bcb-d-1_47.lib + tlib @&&| +/P128 /C /u /a $(XSFLAGS) "bcb\libboost_regex-bcb-d-1_47.lib" +"bcb\libboost_regex-bcb-d-1_47\c_regex_traits.obj" +"bcb\libboost_regex-bcb-d-1_47\cpp_regex_traits.obj" +"bcb\libboost_regex-bcb-d-1_47\cregex.obj" +"bcb\libboost_regex-bcb-d-1_47\fileiter.obj" +"bcb\libboost_regex-bcb-d-1_47\icu.obj" +"bcb\libboost_regex-bcb-d-1_47\instances.obj" +"bcb\libboost_regex-bcb-d-1_47\posix_api.obj" +"bcb\libboost_regex-bcb-d-1_47\regex.obj" +"bcb\libboost_regex-bcb-d-1_47\regex_debug.obj" +"bcb\libboost_regex-bcb-d-1_47\regex_raw_buffer.obj" +"bcb\libboost_regex-bcb-d-1_47\regex_traits_defaults.obj" +"bcb\libboost_regex-bcb-d-1_47\static_mutex.obj" +"bcb\libboost_regex-bcb-d-1_47\usinstances.obj" +"bcb\libboost_regex-bcb-d-1_47\w32_regex_traits.obj" +"bcb\libboost_regex-bcb-d-1_47\wc_regex_traits.obj" +"bcb\libboost_regex-bcb-d-1_47\wide_posix_api.obj" +"bcb\libboost_regex-bcb-d-1_47\winstances.obj" +| + diff --git a/libs/regex/build/common.sh b/libs/regex/build/common.sh new file mode 100644 index 0000000000..b6053d04c7 --- /dev/null +++ b/libs/regex/build/common.sh @@ -0,0 +1,66 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# locate all the header dependencies: +for file in ../../../boost/regex/*.hpp ; do + if [ -f $file ]; then + if [ $file != ../../../boost/regex/concepts.hpp ]; then + if [ $file != ../../../boost/regex/mfc.hpp ]; then + header="$header $file" + fi + fi + fi +done + +for file in ../../../boost/regex/v3/*.hpp; do + if [ -f $file ]; then + header="$header $file" + fi +done + +for file in ../../../boost/regex/v3/*.hxx; do + if [ -f $file ]; then + header="$header $file" + fi +done + +for file in ../../../boost/regex/v4/*.hpp; do + if [ -f $file ]; then + header="$header $file" + fi +done + +for file in ../../../boost/regex/v4/*.hxx; do + if [ -f $file ]; then + header="$header $file" + fi +done + +for file in ../../../boost/regex/config/*.hpp; do + if [ -f $file ]; then + header="$header $file" + fi +done + +for file in ../../../boost/regex/config/*.hxx; do + if [ -f $file ]; then + header="$header $file" + fi +done + +# +# locate all the source files: +for file in ../src/*.cpp; do + if [ -f $file ]; then + src="$src $file" + fi +done + +boost_version=$(grep 'define.*BOOST_LIB_VERSION' ../../../boost/version.hpp | sed 's/.*"\([^"]*\)".*/\1/') +echo Boost version tag = $boost_version + + + + diff --git a/libs/regex/build/gcc-shared.mak b/libs/regex/build/gcc-shared.mak new file mode 100644 index 0000000000..2806967bc7 --- /dev/null +++ b/libs/regex/build/gcc-shared.mak @@ -0,0 +1,190 @@ +# copyright John Maddock 2006-7 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for gcc compiler +# +# usage: +# make +# brings libraries up to date +# make clean +# deletes temporary object files (but not archives). +# + +# +# the following environment variables are recognised: +# ICU_PATH= Path to ICU installation. +# CXXFLAGS= extra compiler options - note applies to all build variants +# INCLUDES= additional include directories +# LDFLAGS= additional linker options +# LIBS= additional library files + +# compiler: +CXX=g++ +LINKER=g++ -shared + +# +# compiler options for release build: +# +C1=-c -O2 -I../../.. -fPIC +# +# compiler options for debug build: +# +C2=-c -g -I../../.. -fPIC + +ifeq "$(ICU_PATH)" "" +$(warning "Building Boost.Regex without ICU / Unicode support:") +$(warning "Hint: set ICU_PATH on the nmake command line to point ") +$(warning "to your ICU installation if you have one.") +else +ICU_CXXFLAGS= -DBOOST_HAS_ICU=1 -I$(ICU_PATH)/include +ICU_LDFLAGS= -L$(ICU_PATH)/lib +ICU_LIBS= -licui18n -licuuc +$(warning "Building Boost.Regex with ICU in $(ICU_PATH)") +endif + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : gcc gcc gcc/boost_regex-gcc-1_47_shared ./gcc/libboost_regex-gcc-1_47.so gcc gcc/boost_regex-gcc-d-1_47_shared ./gcc/libboost_regex-gcc-d-1_47.so + +gcc : + mkdir -p gcc + +clean : boost_regex-gcc-1_47_clean boost_regex-gcc-d-1_47_clean + +install : all + + + +######################################################## +# +# section for libboost_regex-gcc-1_47.a +# +######################################################## +gcc/boost_regex-gcc-1_47_shared/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/c_regex_traits.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/c_regex_traits.cpp + +gcc/boost_regex-gcc-1_47_shared/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/cpp_regex_traits.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/cpp_regex_traits.cpp + +gcc/boost_regex-gcc-1_47_shared/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/cregex.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/cregex.cpp + +gcc/boost_regex-gcc-1_47_shared/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/fileiter.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/fileiter.cpp + +gcc/boost_regex-gcc-1_47_shared/icu.o: ../src/icu.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/icu.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/icu.cpp + +gcc/boost_regex-gcc-1_47_shared/instances.o: ../src/instances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/instances.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/instances.cpp + +gcc/boost_regex-gcc-1_47_shared/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/posix_api.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/posix_api.cpp + +gcc/boost_regex-gcc-1_47_shared/regex.o: ../src/regex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/regex.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex.cpp + +gcc/boost_regex-gcc-1_47_shared/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/regex_debug.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_debug.cpp + +gcc/boost_regex-gcc-1_47_shared/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/regex_raw_buffer.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_raw_buffer.cpp + +gcc/boost_regex-gcc-1_47_shared/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/regex_traits_defaults.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_traits_defaults.cpp + +gcc/boost_regex-gcc-1_47_shared/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/static_mutex.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/static_mutex.cpp + +gcc/boost_regex-gcc-1_47_shared/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/usinstances.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/usinstances.cpp + +gcc/boost_regex-gcc-1_47_shared/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/w32_regex_traits.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/w32_regex_traits.cpp + +gcc/boost_regex-gcc-1_47_shared/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/wc_regex_traits.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/wc_regex_traits.cpp + +gcc/boost_regex-gcc-1_47_shared/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/wide_posix_api.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/wide_posix_api.cpp + +gcc/boost_regex-gcc-1_47_shared/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47_shared/winstances.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/winstances.cpp + +gcc/boost_regex-gcc-1_47_shared : + mkdir -p gcc/boost_regex-gcc-1_47_shared + +boost_regex-gcc-1_47_clean : + rm -f gcc/boost_regex-gcc-1_47_shared/*.o + +./gcc/libboost_regex-gcc-1_47.so : gcc/boost_regex-gcc-1_47_shared/c_regex_traits.o gcc/boost_regex-gcc-1_47_shared/cpp_regex_traits.o gcc/boost_regex-gcc-1_47_shared/cregex.o gcc/boost_regex-gcc-1_47_shared/fileiter.o gcc/boost_regex-gcc-1_47_shared/icu.o gcc/boost_regex-gcc-1_47_shared/instances.o gcc/boost_regex-gcc-1_47_shared/posix_api.o gcc/boost_regex-gcc-1_47_shared/regex.o gcc/boost_regex-gcc-1_47_shared/regex_debug.o gcc/boost_regex-gcc-1_47_shared/regex_raw_buffer.o gcc/boost_regex-gcc-1_47_shared/regex_traits_defaults.o gcc/boost_regex-gcc-1_47_shared/static_mutex.o gcc/boost_regex-gcc-1_47_shared/usinstances.o gcc/boost_regex-gcc-1_47_shared/w32_regex_traits.o gcc/boost_regex-gcc-1_47_shared/wc_regex_traits.o gcc/boost_regex-gcc-1_47_shared/wide_posix_api.o gcc/boost_regex-gcc-1_47_shared/winstances.o + $(LINKER) -o gcc/libboost_regex-gcc-1_47.so $(LDFLAGS) $(ICU_LDFLAGS) gcc/boost_regex-gcc-1_47_shared/c_regex_traits.o gcc/boost_regex-gcc-1_47_shared/cpp_regex_traits.o gcc/boost_regex-gcc-1_47_shared/cregex.o gcc/boost_regex-gcc-1_47_shared/fileiter.o gcc/boost_regex-gcc-1_47_shared/icu.o gcc/boost_regex-gcc-1_47_shared/instances.o gcc/boost_regex-gcc-1_47_shared/posix_api.o gcc/boost_regex-gcc-1_47_shared/regex.o gcc/boost_regex-gcc-1_47_shared/regex_debug.o gcc/boost_regex-gcc-1_47_shared/regex_raw_buffer.o gcc/boost_regex-gcc-1_47_shared/regex_traits_defaults.o gcc/boost_regex-gcc-1_47_shared/static_mutex.o gcc/boost_regex-gcc-1_47_shared/usinstances.o gcc/boost_regex-gcc-1_47_shared/w32_regex_traits.o gcc/boost_regex-gcc-1_47_shared/wc_regex_traits.o gcc/boost_regex-gcc-1_47_shared/wide_posix_api.o gcc/boost_regex-gcc-1_47_shared/winstances.o $(ICU_LIBS) $(LIBS) + +######################################################## +# +# section for libboost_regex-gcc-d-1_47.a +# +######################################################## +gcc/boost_regex-gcc-d-1_47_shared/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/c_regex_traits.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/c_regex_traits.cpp + +gcc/boost_regex-gcc-d-1_47_shared/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/cpp_regex_traits.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/cpp_regex_traits.cpp + +gcc/boost_regex-gcc-d-1_47_shared/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/cregex.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/cregex.cpp + +gcc/boost_regex-gcc-d-1_47_shared/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/fileiter.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/fileiter.cpp + +gcc/boost_regex-gcc-d-1_47_shared/icu.o: ../src/icu.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/icu.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/icu.cpp + +gcc/boost_regex-gcc-d-1_47_shared/instances.o: ../src/instances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/instances.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/instances.cpp + +gcc/boost_regex-gcc-d-1_47_shared/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/posix_api.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/posix_api.cpp + +gcc/boost_regex-gcc-d-1_47_shared/regex.o: ../src/regex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/regex.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex.cpp + +gcc/boost_regex-gcc-d-1_47_shared/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/regex_debug.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_debug.cpp + +gcc/boost_regex-gcc-d-1_47_shared/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/regex_raw_buffer.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_raw_buffer.cpp + +gcc/boost_regex-gcc-d-1_47_shared/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/regex_traits_defaults.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_traits_defaults.cpp + +gcc/boost_regex-gcc-d-1_47_shared/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/static_mutex.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/static_mutex.cpp + +gcc/boost_regex-gcc-d-1_47_shared/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/usinstances.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/usinstances.cpp + +gcc/boost_regex-gcc-d-1_47_shared/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/w32_regex_traits.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/w32_regex_traits.cpp + +gcc/boost_regex-gcc-d-1_47_shared/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/wc_regex_traits.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/wc_regex_traits.cpp + +gcc/boost_regex-gcc-d-1_47_shared/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/wide_posix_api.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/wide_posix_api.cpp + +gcc/boost_regex-gcc-d-1_47_shared/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47_shared/winstances.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/winstances.cpp + +gcc/boost_regex-gcc-d-1_47_shared : + mkdir -p gcc/boost_regex-gcc-d-1_47_shared + +boost_regex-gcc-d-1_47_clean : + rm -f gcc/boost_regex-gcc-d-1_47_shared/*.o + +./gcc/libboost_regex-gcc-d-1_47.so : gcc/boost_regex-gcc-d-1_47_shared/c_regex_traits.o gcc/boost_regex-gcc-d-1_47_shared/cpp_regex_traits.o gcc/boost_regex-gcc-d-1_47_shared/cregex.o gcc/boost_regex-gcc-d-1_47_shared/fileiter.o gcc/boost_regex-gcc-d-1_47_shared/icu.o gcc/boost_regex-gcc-d-1_47_shared/instances.o gcc/boost_regex-gcc-d-1_47_shared/posix_api.o gcc/boost_regex-gcc-d-1_47_shared/regex.o gcc/boost_regex-gcc-d-1_47_shared/regex_debug.o gcc/boost_regex-gcc-d-1_47_shared/regex_raw_buffer.o gcc/boost_regex-gcc-d-1_47_shared/regex_traits_defaults.o gcc/boost_regex-gcc-d-1_47_shared/static_mutex.o gcc/boost_regex-gcc-d-1_47_shared/usinstances.o gcc/boost_regex-gcc-d-1_47_shared/w32_regex_traits.o gcc/boost_regex-gcc-d-1_47_shared/wc_regex_traits.o gcc/boost_regex-gcc-d-1_47_shared/wide_posix_api.o gcc/boost_regex-gcc-d-1_47_shared/winstances.o + $(LINKER) -o gcc/libboost_regex-gcc-d-1_47.so $(LDFLAGS) $(ICU_LDFLAGS) gcc/boost_regex-gcc-d-1_47_shared/c_regex_traits.o gcc/boost_regex-gcc-d-1_47_shared/cpp_regex_traits.o gcc/boost_regex-gcc-d-1_47_shared/cregex.o gcc/boost_regex-gcc-d-1_47_shared/fileiter.o gcc/boost_regex-gcc-d-1_47_shared/icu.o gcc/boost_regex-gcc-d-1_47_shared/instances.o gcc/boost_regex-gcc-d-1_47_shared/posix_api.o gcc/boost_regex-gcc-d-1_47_shared/regex.o gcc/boost_regex-gcc-d-1_47_shared/regex_debug.o gcc/boost_regex-gcc-d-1_47_shared/regex_raw_buffer.o gcc/boost_regex-gcc-d-1_47_shared/regex_traits_defaults.o gcc/boost_regex-gcc-d-1_47_shared/static_mutex.o gcc/boost_regex-gcc-d-1_47_shared/usinstances.o gcc/boost_regex-gcc-d-1_47_shared/w32_regex_traits.o gcc/boost_regex-gcc-d-1_47_shared/wc_regex_traits.o gcc/boost_regex-gcc-d-1_47_shared/wide_posix_api.o gcc/boost_regex-gcc-d-1_47_shared/winstances.o $(ICU_LIBS) $(LIBS) + diff --git a/libs/regex/build/gcc.mak b/libs/regex/build/gcc.mak new file mode 100644 index 0000000000..fdca323869 --- /dev/null +++ b/libs/regex/build/gcc.mak @@ -0,0 +1,192 @@ +# copyright John Maddock 2006-7 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for gcc compiler +# +# usage: +# make +# brings libraries up to date +# make clean +# deletes temporary object files (but not archives). +# + +# +# the following environment variables are recognised: +# ICU_PATH= Path to ICU installation. +# CXXFLAGS= extra compiler options - note applies to all build variants +# INCLUDES= additional include directories +# LDFLAGS= additional linker options +# LIBS= additional library files + +# compiler: +CXX=g++ +LINKER=g++ -shared + +# +# compiler options for release build: +# +C1=-c -O2 -I../../.. +# +# compiler options for debug build: +# +C2=-c -g -I../../.. + +ifeq "$(ICU_PATH)" "" +$(warning "Building Boost.Regex without ICU / Unicode support:") +$(warning "Hint: set ICU_PATH on the nmake command line to point ") +$(warning "to your ICU installation if you have one.") +else +ICU_CXXFLAGS= -DBOOST_HAS_ICU=1 -I$(ICU_PATH)/include +ICU_LDFLAGS= -L$(ICU_PATH)/lib +ICU_LIBS= -licui18n -licuuc +$(warning "Building Boost.Regex with ICU in $(ICU_PATH)") +endif + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : gcc gcc gcc/boost_regex-gcc-1_47 ./gcc/libboost_regex-gcc-1_47.a gcc gcc/boost_regex-gcc-d-1_47 ./gcc/libboost_regex-gcc-d-1_47.a + +gcc : + mkdir -p gcc + +clean : boost_regex-gcc-1_47_clean boost_regex-gcc-d-1_47_clean + +install : all + + + +######################################################## +# +# section for libboost_regex-gcc-1_47.a +# +######################################################## +gcc/boost_regex-gcc-1_47/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/c_regex_traits.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/c_regex_traits.cpp + +gcc/boost_regex-gcc-1_47/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/cpp_regex_traits.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/cpp_regex_traits.cpp + +gcc/boost_regex-gcc-1_47/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/cregex.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/cregex.cpp + +gcc/boost_regex-gcc-1_47/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/fileiter.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/fileiter.cpp + +gcc/boost_regex-gcc-1_47/icu.o: ../src/icu.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/icu.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/icu.cpp + +gcc/boost_regex-gcc-1_47/instances.o: ../src/instances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/instances.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/instances.cpp + +gcc/boost_regex-gcc-1_47/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/posix_api.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/posix_api.cpp + +gcc/boost_regex-gcc-1_47/regex.o: ../src/regex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/regex.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex.cpp + +gcc/boost_regex-gcc-1_47/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/regex_debug.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_debug.cpp + +gcc/boost_regex-gcc-1_47/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/regex_raw_buffer.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_raw_buffer.cpp + +gcc/boost_regex-gcc-1_47/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/regex_traits_defaults.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_traits_defaults.cpp + +gcc/boost_regex-gcc-1_47/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/static_mutex.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/static_mutex.cpp + +gcc/boost_regex-gcc-1_47/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/usinstances.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/usinstances.cpp + +gcc/boost_regex-gcc-1_47/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/w32_regex_traits.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/w32_regex_traits.cpp + +gcc/boost_regex-gcc-1_47/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/wc_regex_traits.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/wc_regex_traits.cpp + +gcc/boost_regex-gcc-1_47/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/wide_posix_api.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/wide_posix_api.cpp + +gcc/boost_regex-gcc-1_47/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-1_47/winstances.o $(C1) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/winstances.cpp + +gcc/boost_regex-gcc-1_47 : + mkdir -p gcc/boost_regex-gcc-1_47 + +boost_regex-gcc-1_47_clean : + rm -f gcc/boost_regex-gcc-1_47/*.o + +./gcc/libboost_regex-gcc-1_47.a : gcc/boost_regex-gcc-1_47/c_regex_traits.o gcc/boost_regex-gcc-1_47/cpp_regex_traits.o gcc/boost_regex-gcc-1_47/cregex.o gcc/boost_regex-gcc-1_47/fileiter.o gcc/boost_regex-gcc-1_47/icu.o gcc/boost_regex-gcc-1_47/instances.o gcc/boost_regex-gcc-1_47/posix_api.o gcc/boost_regex-gcc-1_47/regex.o gcc/boost_regex-gcc-1_47/regex_debug.o gcc/boost_regex-gcc-1_47/regex_raw_buffer.o gcc/boost_regex-gcc-1_47/regex_traits_defaults.o gcc/boost_regex-gcc-1_47/static_mutex.o gcc/boost_regex-gcc-1_47/usinstances.o gcc/boost_regex-gcc-1_47/w32_regex_traits.o gcc/boost_regex-gcc-1_47/wc_regex_traits.o gcc/boost_regex-gcc-1_47/wide_posix_api.o gcc/boost_regex-gcc-1_47/winstances.o + ar -r gcc/libboost_regex-gcc-1_47.a gcc/boost_regex-gcc-1_47/c_regex_traits.o gcc/boost_regex-gcc-1_47/cpp_regex_traits.o gcc/boost_regex-gcc-1_47/cregex.o gcc/boost_regex-gcc-1_47/fileiter.o gcc/boost_regex-gcc-1_47/icu.o gcc/boost_regex-gcc-1_47/instances.o gcc/boost_regex-gcc-1_47/posix_api.o gcc/boost_regex-gcc-1_47/regex.o gcc/boost_regex-gcc-1_47/regex_debug.o gcc/boost_regex-gcc-1_47/regex_raw_buffer.o gcc/boost_regex-gcc-1_47/regex_traits_defaults.o gcc/boost_regex-gcc-1_47/static_mutex.o gcc/boost_regex-gcc-1_47/usinstances.o gcc/boost_regex-gcc-1_47/w32_regex_traits.o gcc/boost_regex-gcc-1_47/wc_regex_traits.o gcc/boost_regex-gcc-1_47/wide_posix_api.o gcc/boost_regex-gcc-1_47/winstances.o + -ar -s gcc/libboost_regex-gcc-1_47.a + +######################################################## +# +# section for libboost_regex-gcc-d-1_47.a +# +######################################################## +gcc/boost_regex-gcc-d-1_47/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/c_regex_traits.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/c_regex_traits.cpp + +gcc/boost_regex-gcc-d-1_47/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/cpp_regex_traits.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/cpp_regex_traits.cpp + +gcc/boost_regex-gcc-d-1_47/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/cregex.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/cregex.cpp + +gcc/boost_regex-gcc-d-1_47/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/fileiter.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/fileiter.cpp + +gcc/boost_regex-gcc-d-1_47/icu.o: ../src/icu.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/icu.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/icu.cpp + +gcc/boost_regex-gcc-d-1_47/instances.o: ../src/instances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/instances.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/instances.cpp + +gcc/boost_regex-gcc-d-1_47/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/posix_api.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/posix_api.cpp + +gcc/boost_regex-gcc-d-1_47/regex.o: ../src/regex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/regex.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex.cpp + +gcc/boost_regex-gcc-d-1_47/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/regex_debug.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_debug.cpp + +gcc/boost_regex-gcc-d-1_47/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/regex_raw_buffer.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_raw_buffer.cpp + +gcc/boost_regex-gcc-d-1_47/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/regex_traits_defaults.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/regex_traits_defaults.cpp + +gcc/boost_regex-gcc-d-1_47/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/static_mutex.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/static_mutex.cpp + +gcc/boost_regex-gcc-d-1_47/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/usinstances.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/usinstances.cpp + +gcc/boost_regex-gcc-d-1_47/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/w32_regex_traits.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/w32_regex_traits.cpp + +gcc/boost_regex-gcc-d-1_47/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/wc_regex_traits.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/wc_regex_traits.cpp + +gcc/boost_regex-gcc-d-1_47/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/wide_posix_api.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/wide_posix_api.cpp + +gcc/boost_regex-gcc-d-1_47/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o gcc/boost_regex-gcc-d-1_47/winstances.o $(C2) $(CXXFLAGS) $(ICU_CXXFLAGS) ../src/winstances.cpp + +gcc/boost_regex-gcc-d-1_47 : + mkdir -p gcc/boost_regex-gcc-d-1_47 + +boost_regex-gcc-d-1_47_clean : + rm -f gcc/boost_regex-gcc-d-1_47/*.o + +./gcc/libboost_regex-gcc-d-1_47.a : gcc/boost_regex-gcc-d-1_47/c_regex_traits.o gcc/boost_regex-gcc-d-1_47/cpp_regex_traits.o gcc/boost_regex-gcc-d-1_47/cregex.o gcc/boost_regex-gcc-d-1_47/fileiter.o gcc/boost_regex-gcc-d-1_47/icu.o gcc/boost_regex-gcc-d-1_47/instances.o gcc/boost_regex-gcc-d-1_47/posix_api.o gcc/boost_regex-gcc-d-1_47/regex.o gcc/boost_regex-gcc-d-1_47/regex_debug.o gcc/boost_regex-gcc-d-1_47/regex_raw_buffer.o gcc/boost_regex-gcc-d-1_47/regex_traits_defaults.o gcc/boost_regex-gcc-d-1_47/static_mutex.o gcc/boost_regex-gcc-d-1_47/usinstances.o gcc/boost_regex-gcc-d-1_47/w32_regex_traits.o gcc/boost_regex-gcc-d-1_47/wc_regex_traits.o gcc/boost_regex-gcc-d-1_47/wide_posix_api.o gcc/boost_regex-gcc-d-1_47/winstances.o + ar -r gcc/libboost_regex-gcc-d-1_47.a gcc/boost_regex-gcc-d-1_47/c_regex_traits.o gcc/boost_regex-gcc-d-1_47/cpp_regex_traits.o gcc/boost_regex-gcc-d-1_47/cregex.o gcc/boost_regex-gcc-d-1_47/fileiter.o gcc/boost_regex-gcc-d-1_47/icu.o gcc/boost_regex-gcc-d-1_47/instances.o gcc/boost_regex-gcc-d-1_47/posix_api.o gcc/boost_regex-gcc-d-1_47/regex.o gcc/boost_regex-gcc-d-1_47/regex_debug.o gcc/boost_regex-gcc-d-1_47/regex_raw_buffer.o gcc/boost_regex-gcc-d-1_47/regex_traits_defaults.o gcc/boost_regex-gcc-d-1_47/static_mutex.o gcc/boost_regex-gcc-d-1_47/usinstances.o gcc/boost_regex-gcc-d-1_47/w32_regex_traits.o gcc/boost_regex-gcc-d-1_47/wc_regex_traits.o gcc/boost_regex-gcc-d-1_47/wide_posix_api.o gcc/boost_regex-gcc-d-1_47/winstances.o + -ar -s gcc/libboost_regex-gcc-d-1_47.a + diff --git a/libs/regex/build/gcc_gen.sh b/libs/regex/build/gcc_gen.sh new file mode 100644 index 0000000000..2c9ece45ce --- /dev/null +++ b/libs/regex/build/gcc_gen.sh @@ -0,0 +1,278 @@ +#! /bin/bash + +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +libname="" +src="" +header="" +all_dep="" + +# current makefile: +out="" +# temporary file: +tout="" +# install target temp file: +iout="" +# debug flag: +debug="no" +# compile options: +opts="" +# main output sub-directory: +subdir="" +# vcl flag: +use_vcl="yes" + +############################################################### +# +# gcc generator section: +# +############################################################### + +gcc_shared="no" + +function gcc_gen_lib() +{ + if test "$gcc_shared" == "yes"; then + obj_dir="$libname""_shared" + all_dep="$all_dep $subdir $subdir/$obj_dir ./$subdir/lib$libname.so" + else + obj_dir="$libname" + all_dep="$all_dep $subdir $subdir/$obj_dir ./$subdir/lib$libname.a" + fi +# +# set up section comments: + cat >> $tout << EOF +######################################################## +# +# section for lib$libname.a +# +######################################################## +EOF +# +# process source files: + all_obj="" + for file in $src + do + obj=`echo "$file" | sed 's/.*src\/\(.*\)cpp/\1o/g'` + obj="$subdir/$obj_dir/$obj" + all_obj="$all_obj $obj" + echo "$obj: $file \$(ALL_HEADER)" >> $tout + echo " \$(CXX) \$(INCLUDES) -o $obj $opts \$(CXXFLAGS) \$(ICU_CXXFLAGS) $file" >> $tout + echo "" >> $tout + done +# +# now for the directories for this library: + echo "$subdir/$obj_dir : " >> $tout + echo " mkdir -p $subdir/$obj_dir" >> $tout + echo "" >> $tout +# +# now for the clean options for this library: + all_clean="$all_clean $libname""_clean" + echo "$libname"_clean : >> $tout + echo " rm -f $subdir/$obj_dir/*.o" >> $tout + echo "" >> $tout +# +# now for the main target for this library: + if test "$gcc_shared" == "yes"; then + echo ./$subdir/lib$libname.so : $all_obj >> $tout + echo " \$(LINKER) -o $subdir/lib$libname.so \$(LDFLAGS) \$(ICU_LDFLAGS) $all_obj \$(ICU_LIBS) \$(LIBS)" >> $tout + else + echo ./$subdir/lib$libname.a : $all_obj >> $tout + echo " ar -r $subdir/lib$libname.a $all_obj" >> $tout + echo " -ar -s $subdir/lib$libname.a" >> $tout + fi + echo "" >> $tout +} + +function gcc_gen() +{ + out="gcc.mak" + tout="temp" + iout="temp_install" + subdir="gcc" + all_dep="" + all_clean="" + echo > $out + echo > $tout + echo > $iout + + libname="boost_regex-gcc-${boost_version}" + opts="\$(C1)" + gcc_gen_lib + libname="boost_regex-gcc-d-${boost_version}" + opts="\$(C2)" + gcc_gen_lib + + + cat > $out << EOF +# copyright John Maddock 2006-7 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for gcc compiler +# +# usage: +# make +# brings libraries up to date +# make clean +# deletes temporary object files (but not archives). +# + +# +# the following environment variables are recognised: +# ICU_PATH= Path to ICU installation. +# CXXFLAGS= extra compiler options - note applies to all build variants +# INCLUDES= additional include directories +# LDFLAGS= additional linker options +# LIBS= additional library files + +# compiler: +CXX=g++ +LINKER=g++ -shared + +# +# compiler options for release build: +# +C1=-c -O2 -I../../.. +# +# compiler options for debug build: +# +C2=-c -g -I../../.. + +ifeq "\$(ICU_PATH)" "" +\$(warning "Building Boost.Regex without ICU / Unicode support:") +\$(warning "Hint: set ICU_PATH on the nmake command line to point ") +\$(warning "to your ICU installation if you have one.") +else +ICU_CXXFLAGS= -DBOOST_HAS_ICU=1 -I\$(ICU_PATH)/include +ICU_LDFLAGS= -L\$(ICU_PATH)/lib +ICU_LIBS= -licui18n -licuuc +\$(warning "Building Boost.Regex with ICU in \$(ICU_PATH)") +endif + +EOF + echo "" >> $out + echo "ALL_HEADER=$header" >> $out + echo "" >> $out + echo "all : $subdir $all_dep" >> $out + echo >> $out + echo "$subdir :" >> $out + echo " mkdir -p $subdir" >> $out + echo >> $out + echo "clean : $all_clean" >> $out + echo >> $out + echo "install : all" >> $out + cat $iout >> $out + echo >> $out + cat $tout >> $out +} + +function gcc_gen_shared() +{ + out="gcc-shared.mak" + tout="temp" + iout="temp_install" + subdir="gcc" + all_dep="" + all_clean="" + echo > $out + echo > $tout + echo > $iout + + libname="boost_regex-gcc-${boost_version}" + opts="\$(C1)" + gcc_gen_lib + libname="boost_regex-gcc-d-${boost_version}" + opts="\$(C2)" + gcc_gen_lib + + + cat > $out << EOF +# copyright John Maddock 2006-7 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for gcc compiler +# +# usage: +# make +# brings libraries up to date +# make clean +# deletes temporary object files (but not archives). +# + +# +# the following environment variables are recognised: +# ICU_PATH= Path to ICU installation. +# CXXFLAGS= extra compiler options - note applies to all build variants +# INCLUDES= additional include directories +# LDFLAGS= additional linker options +# LIBS= additional library files + +# compiler: +CXX=g++ +LINKER=g++ -shared + +# +# compiler options for release build: +# +C1=-c -O2 -I../../.. -fPIC +# +# compiler options for debug build: +# +C2=-c -g -I../../.. -fPIC + +ifeq "\$(ICU_PATH)" "" +\$(warning "Building Boost.Regex without ICU / Unicode support:") +\$(warning "Hint: set ICU_PATH on the nmake command line to point ") +\$(warning "to your ICU installation if you have one.") +else +ICU_CXXFLAGS= -DBOOST_HAS_ICU=1 -I\$(ICU_PATH)/include +ICU_LDFLAGS= -L\$(ICU_PATH)/lib +ICU_LIBS= -licui18n -licuuc +\$(warning "Building Boost.Regex with ICU in \$(ICU_PATH)") +endif + +EOF + echo "" >> $out + echo "ALL_HEADER=$header" >> $out + echo "" >> $out + echo "all : $subdir $all_dep" >> $out + echo >> $out + echo "$subdir :" >> $out + echo " mkdir -p $subdir" >> $out + echo >> $out + echo "clean : $all_clean" >> $out + echo >> $out + echo "install : all" >> $out + cat $iout >> $out + echo >> $out + cat $tout >> $out +} + +# +# locate source files: +# +. common.sh + +# +# generate gcc makefile: +gcc_gen +gcc_shared="yes" +gcc_gen_shared + + +# +# remove tmep files; +rm -f $tout $iout + + + + + + diff --git a/libs/regex/build/generic.mak b/libs/regex/build/generic.mak new file mode 100644 index 0000000000..4ef093cc63 --- /dev/null +++ b/libs/regex/build/generic.mak @@ -0,0 +1,110 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for generic compiler +# +# usage: +# make +# brings libraries up to date +# make clean +# deletes temporary object files (but not archives). +# + +# +# the following environment variables are recognised: +# CXXFLAGS= extra compiler options - note applies to all build variants +# INCLUDES= additional include directories +# LDFLAGS= additional linker options +# LIBS= additional library files +# CXX= compiler to use +# LINKER= linker/archiver to use +# name of subdirectory to use for object/archive files: +DIRNAME=generic + +# +# default compiler options for release build: +# +C1=-c -O2 -I../../../ + + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : $(DIRNAME) $(DIRNAME) $(DIRNAME)/boost_regex ./$(DIRNAME)/libboost_regex.so + +$(DIRNAME) : + mkdir -p $(DIRNAME) + +clean : boost_regex_clean + +install : all + + + +######################################################## +# +# section for libboost_regex.so +# +######################################################## +$(DIRNAME)/boost_regex/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/c_regex_traits.o $(C1) $(CXXFLAGS) ../src/c_regex_traits.cpp + +$(DIRNAME)/boost_regex/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/cpp_regex_traits.o $(C1) $(CXXFLAGS) ../src/cpp_regex_traits.cpp + +$(DIRNAME)/boost_regex/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/cregex.o $(C1) $(CXXFLAGS) ../src/cregex.cpp + +$(DIRNAME)/boost_regex/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/fileiter.o $(C1) $(CXXFLAGS) ../src/fileiter.cpp + +$(DIRNAME)/boost_regex/icu.o: ../src/icu.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/icu.o $(C1) $(CXXFLAGS) ../src/icu.cpp + +$(DIRNAME)/boost_regex/instances.o: ../src/instances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/instances.o $(C1) $(CXXFLAGS) ../src/instances.cpp + +$(DIRNAME)/boost_regex/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/posix_api.o $(C1) $(CXXFLAGS) ../src/posix_api.cpp + +$(DIRNAME)/boost_regex/regex.o: ../src/regex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/regex.o $(C1) $(CXXFLAGS) ../src/regex.cpp + +$(DIRNAME)/boost_regex/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/regex_debug.o $(C1) $(CXXFLAGS) ../src/regex_debug.cpp + +$(DIRNAME)/boost_regex/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/regex_raw_buffer.o $(C1) $(CXXFLAGS) ../src/regex_raw_buffer.cpp + +$(DIRNAME)/boost_regex/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/regex_traits_defaults.o $(C1) $(CXXFLAGS) ../src/regex_traits_defaults.cpp + +$(DIRNAME)/boost_regex/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/static_mutex.o $(C1) $(CXXFLAGS) ../src/static_mutex.cpp + +$(DIRNAME)/boost_regex/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/usinstances.o $(C1) $(CXXFLAGS) ../src/usinstances.cpp + +$(DIRNAME)/boost_regex/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/w32_regex_traits.o $(C1) $(CXXFLAGS) ../src/w32_regex_traits.cpp + +$(DIRNAME)/boost_regex/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/wc_regex_traits.o $(C1) $(CXXFLAGS) ../src/wc_regex_traits.cpp + +$(DIRNAME)/boost_regex/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/wide_posix_api.o $(C1) $(CXXFLAGS) ../src/wide_posix_api.cpp + +$(DIRNAME)/boost_regex/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + $(CXX) $(INCLUDES) -o $(DIRNAME)/boost_regex/winstances.o $(C1) $(CXXFLAGS) ../src/winstances.cpp + +$(DIRNAME)/boost_regex : + mkdir -p $(DIRNAME)/boost_regex + +boost_regex_clean : + rm -f $(DIRNAME)/boost_regex/*.o + +./$(DIRNAME)/libboost_regex.so : $(DIRNAME)/boost_regex/c_regex_traits.o $(DIRNAME)/boost_regex/cpp_regex_traits.o $(DIRNAME)/boost_regex/cregex.o $(DIRNAME)/boost_regex/fileiter.o $(DIRNAME)/boost_regex/icu.o $(DIRNAME)/boost_regex/instances.o $(DIRNAME)/boost_regex/posix_api.o $(DIRNAME)/boost_regex/regex.o $(DIRNAME)/boost_regex/regex_debug.o $(DIRNAME)/boost_regex/regex_raw_buffer.o $(DIRNAME)/boost_regex/regex_traits_defaults.o $(DIRNAME)/boost_regex/static_mutex.o $(DIRNAME)/boost_regex/usinstances.o $(DIRNAME)/boost_regex/w32_regex_traits.o $(DIRNAME)/boost_regex/wc_regex_traits.o $(DIRNAME)/boost_regex/wide_posix_api.o $(DIRNAME)/boost_regex/winstances.o + $(LINKER) $(LDFLAGS) -o $(DIRNAME)/libboost_regex.so $(DIRNAME)/boost_regex/c_regex_traits.o $(DIRNAME)/boost_regex/cpp_regex_traits.o $(DIRNAME)/boost_regex/cregex.o $(DIRNAME)/boost_regex/fileiter.o $(DIRNAME)/boost_regex/icu.o $(DIRNAME)/boost_regex/instances.o $(DIRNAME)/boost_regex/posix_api.o $(DIRNAME)/boost_regex/regex.o $(DIRNAME)/boost_regex/regex_debug.o $(DIRNAME)/boost_regex/regex_raw_buffer.o $(DIRNAME)/boost_regex/regex_traits_defaults.o $(DIRNAME)/boost_regex/static_mutex.o $(DIRNAME)/boost_regex/usinstances.o $(DIRNAME)/boost_regex/w32_regex_traits.o $(DIRNAME)/boost_regex/wc_regex_traits.o $(DIRNAME)/boost_regex/wide_posix_api.o $(DIRNAME)/boost_regex/winstances.o $(LIBS) + diff --git a/libs/regex/build/generic_gen.sh b/libs/regex/build/generic_gen.sh new file mode 100644 index 0000000000..d33fdc7449 --- /dev/null +++ b/libs/regex/build/generic_gen.sh @@ -0,0 +1,154 @@ +#! /bin/bash + +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +libname="" +src="" +header="" +all_dep="" + +# current makefile: +out="" +# temporary file: +tout="" +# install target temp file: +iout="" +# debug flag: +debug="no" +# compile options: +opts="" +# main output sub-directory: +subdir="" +# vcl flag: +use_vcl="yes" + + +####################################################################### +# +# section for generic compiler +# +####################################################################### + + +function gen_gen_lib() +{ + all_dep="$all_dep $subdir $subdir/$libname ./$subdir/lib$libname.so" +# +# set up section comments: + cat >> $tout << EOF +######################################################## +# +# section for lib$libname.so +# +######################################################## +EOF +# +# process source files: + all_obj="" + for file in $src + do + obj=`echo "$file" | sed 's/.*src\/\(.*\)cpp/\1o/g'` + obj="$subdir/$libname/$obj" + all_obj="$all_obj $obj" + echo "$obj: $file \$(ALL_HEADER)" >> $tout + echo " \$(CXX) \$(INCLUDES) -o $obj $opts \$(CXXFLAGS) $file" >> $tout + echo "" >> $tout + done +# +# now for the directories for this library: + echo "$subdir/$libname : " >> $tout + echo " mkdir -p $subdir/$libname" >> $tout + echo "" >> $tout +# +# now for the clean options for this library: + all_clean="$all_clean $libname""_clean" + echo "$libname"_clean : >> $tout + echo " rm -f $subdir/$libname/*.o" >> $tout + echo "" >> $tout +# +# now for the main target for this library: + echo ./$subdir/lib$libname.so : $all_obj >> $tout + echo " \$(LINKER) \$(LDFLAGS) -o $subdir/lib$libname.so $all_obj \$(LIBS)" >> $tout + echo "" >> $tout +} + +function gen_gen() +{ + out="generic.mak" + tout="temp" + iout="temp_install" + subdir="\$(DIRNAME)" + all_dep="" + all_clean="" + echo > $out + echo > $tout + echo > $iout + + libname="boost_regex" + opts="\$(C1)" + gen_gen_lib + + cat > $out << EOF +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for generic compiler +# +# usage: +# make +# brings libraries up to date +# make clean +# deletes temporary object files (but not archives). +# + +# +# the following environment variables are recognised: +# CXXFLAGS= extra compiler options - note applies to all build variants +# INCLUDES= additional include directories +# LDFLAGS= additional linker options +# LIBS= additional library files +# CXX= compiler to use +# LINKER= linker/archiver to use +# name of subdirectory to use for object/archive files: +DIRNAME=generic + +# +# default compiler options for release build: +# +C1=-c -O2 -I../../../ + + +EOF + echo "" >> $out + echo "ALL_HEADER=$header" >> $out + echo "" >> $out + echo "all : $subdir $all_dep" >> $out + echo >> $out + echo "$subdir :" >> $out + echo " mkdir -p $subdir" >> $out + echo >> $out + echo "clean : $all_clean" >> $out + echo >> $out + echo "install : all" >> $out + cat $iout >> $out + echo >> $out + cat $tout >> $out +} + +. common.sh + +# +# generate generic makefile: +gen_gen + +# +# remove tmep files; +rm -f $tout $iout + + + diff --git a/libs/regex/build/has_icu_test.cpp b/libs/regex/build/has_icu_test.cpp new file mode 100644 index 0000000000..f79880cc6a --- /dev/null +++ b/libs/regex/build/has_icu_test.cpp @@ -0,0 +1,26 @@ +/* + * + * Copyright (c) 2010 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include <unicode/uversion.h> +#include <unicode/utypes.h> +#include <unicode/uchar.h> +#include <unicode/coll.h> + +#if defined(_MSC_VER) && !defined(_DLL) +#error "Mixing ICU with a static runtime doesn't work" +#endif + +int main() +{ + UErrorCode err = U_ZERO_ERROR; + UChar32 c = ::u_charFromName(U_UNICODE_CHAR_NAME, "GREEK SMALL LETTER ALPHA", &err); + return err; +}
\ No newline at end of file diff --git a/libs/regex/build/sun_gen.sh b/libs/regex/build/sun_gen.sh new file mode 100644 index 0000000000..d1817f1e03 --- /dev/null +++ b/libs/regex/build/sun_gen.sh @@ -0,0 +1,225 @@ +#! /bin/bash + +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +libname="" +src="" +header="" +all_dep="" + +# current makefile: +out="" +# temporary file: +tout="" +# install target temp file: +iout="" +# debug flag: +debug="no" +# compile options: +opts="" +# main output sub-directory: +subdir="" +# vcl flag: +use_vcl="yes" + +####################################################################### +# +# section for Sun Forte 6.1 (5.1 compiler) +# +####################################################################### + +function sun_gen_lib() +{ + all_dep="$all_dep $subdir/$libname $subdir/$libname.a" + +# +# set up section comments: + cat >> $tout << EOF +######################################################## +# +# section for $libname.a +# +######################################################## +EOF +# +# process source files: + all_obj="" + all_lib_obj="" + for file in $src + do + obj=`echo "$file" | sed 's/.*src\/\(.*\)cpp/\1o/g'` + obj="$subdir/$libname/$obj" + all_obj="$all_obj $obj" + all_lib_obj="$all_lib_obj $obj" + echo "$obj: $file \$(ALL_HEADER)" >> $tout + echo " CC -c \$(INCLUDES) $opts \$(CXXFLAGS) -o $obj $file" >> $tout + echo "" >> $tout + done +# +# now for the directories for this library: + echo "$subdir/$libname : " >> $tout + echo " mkdir -p $subdir/$libname" >> $tout + echo "" >> $tout +# +# now for the clean options for this library: + all_clean="$all_clean $libname""_clean" + echo "$libname"_clean : >> $tout + echo " rm -f $subdir/$libname/"'*.o' >> $tout + echo " rm -fr $subdir/$libname/\$(SUNWS_CACHE_NAME)" >> $tout + echo "" >> $tout +# +# now for the main target for this library: + echo $subdir/$libname.a : $all_obj >> $tout + echo " CC -xar \$(CXXFLAGS) \$(LDFLAGS) -o $subdir/$libname.a $all_lib_obj" >> $tout + echo "" >> $tout +} + +function sun_gen_dll() +{ + all_dep="$all_dep $subdir/shared_$libname $subdir/$libname.so" +# +# set up section comments: + cat >> $tout << EOF +######################################################## +# +# section for $libname.so +# +######################################################## +EOF +# +# process source files: + all_obj="" + for file in $src + do + obj=`echo "$file" | sed 's/.*src\/\(.*\)cpp/\1o/g'` + obj="$subdir/shared_$libname/$obj" + all_obj="$all_obj $obj" + echo "$obj: $file \$(ALL_HEADER)" >> $tout + echo " CC -c \$(INCLUDES) $opts \$(CXXFLAGS) -o $obj $file" >> $tout + echo "" >> $tout + done +# +# now for the directories for this library: + echo "$subdir/shared_$libname :" >> $tout + echo " mkdir -p $subdir/shared_$libname" >> $tout + echo "" >> $tout +# +# now for the clean options for this library: + all_clean="$all_clean $libname""_clean_shared" + echo "$libname"_clean_shared : >> $tout + echo " rm -f $subdir/shared_$libname/"'*.o' >> $tout + echo " rm -fr $subdir/shared_$libname/\$(SUNWS_CACHE_NAME)" >> $tout + echo "" >> $tout +# +# now for the main target for this library: + echo $subdir/$libname.so : $all_obj >> $tout + echo " CC $opts -G -o $subdir/$libname.so \$(LDFLAGS) $all_obj \$(LIBS)" >> $tout + echo "" >> $tout +} + + + +function sun_gen() +{ + tout="temp" + iout="temp_install" + all_dep="$subdir" + all_clean="" + echo > $out + echo > $tout + rm -f $iout + + libname="libboost_regex\$(LIBSUFFIX)" + opts="-O2 -I../../../" + sun_gen_lib + + libname="libboost_regex_mt\$(LIBSUFFIX)" + opts="-O2 -mt -I../../../" + sun_gen_lib + + libname="libboost_regex\$(LIBSUFFIX)" + opts="-KPIC -O2 -I../../../" + sun_gen_dll + + libname="libboost_regex_mt\$(LIBSUFFIX)" + opts="-KPIC -O2 -mt -I../../../" + sun_gen_dll + + + cat > $out << EOF +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for Sun Forte 6.1 +# +# usage: +# make +# brings libraries up to date +# make clean +# removes all temporary files. + +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +LDFLAGS= +# +# add additional libraries to link to here: +# +LIBS= +# +# lib suffix string: +# +LIBSUFFIX= +# +# template cache path: +# +SUNWS_CACHE_NAME=SunWS_cache + + +EOF + echo "" >> $out + echo "ALL_HEADER=$header" >> $out + echo "" >> $out + echo "all : $all_dep" >> $out + echo >> $out + echo "clean : $all_clean" >> $out + echo >> $out + echo "install : all" >> $out +# cat $iout >> $out + echo >> $out + echo $subdir : >> $out + echo " mkdir -p $subdir" >> $out + echo "" >> $out + + cat $tout >> $out +} + +. common.sh + +# +# generate Sun 6.1 makefile: +out="sunpro.mak" +subdir="sunpro" +sun_gen + + +# +# remove tmep files; +rm -f $tout $iout + + + + diff --git a/libs/regex/build/sunpro.mak b/libs/regex/build/sunpro.mak new file mode 100644 index 0000000000..2fd0232db6 --- /dev/null +++ b/libs/regex/build/sunpro.mak @@ -0,0 +1,316 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for Sun Forte 6.1 +# +# usage: +# make +# brings libraries up to date +# make clean +# removes all temporary files. + +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +LDFLAGS= +# +# add additional libraries to link to here: +# +LIBS= +# +# lib suffix string: +# +LIBSUFFIX= +# +# template cache path: +# +SUNWS_CACHE_NAME=SunWS_cache + + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : sunpro sunpro/libboost_regex$(LIBSUFFIX) sunpro/libboost_regex$(LIBSUFFIX).a sunpro/libboost_regex_mt$(LIBSUFFIX) sunpro/libboost_regex_mt$(LIBSUFFIX).a sunpro/shared_libboost_regex$(LIBSUFFIX) sunpro/libboost_regex$(LIBSUFFIX).so sunpro/shared_libboost_regex_mt$(LIBSUFFIX) sunpro/libboost_regex_mt$(LIBSUFFIX).so + +clean : libboost_regex$(LIBSUFFIX)_clean libboost_regex_mt$(LIBSUFFIX)_clean libboost_regex$(LIBSUFFIX)_clean_shared libboost_regex_mt$(LIBSUFFIX)_clean_shared + +install : all + +sunpro : + mkdir -p sunpro + + +######################################################## +# +# section for libboost_regex$(LIBSUFFIX).a +# +######################################################## +sunpro/libboost_regex$(LIBSUFFIX)/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/c_regex_traits.o ../src/c_regex_traits.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/cpp_regex_traits.o ../src/cpp_regex_traits.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/cregex.o ../src/cregex.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/fileiter.o ../src/fileiter.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/icu.o: ../src/icu.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/icu.o ../src/icu.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/instances.o: ../src/instances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/instances.o ../src/instances.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/posix_api.o ../src/posix_api.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/regex.o: ../src/regex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/regex.o ../src/regex.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/regex_debug.o ../src/regex_debug.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/regex_raw_buffer.o ../src/regex_raw_buffer.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/regex_traits_defaults.o ../src/regex_traits_defaults.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/static_mutex.o ../src/static_mutex.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/usinstances.o ../src/usinstances.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/w32_regex_traits.o ../src/w32_regex_traits.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/wc_regex_traits.o ../src/wc_regex_traits.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/wide_posix_api.o ../src/wide_posix_api.cpp + +sunpro/libboost_regex$(LIBSUFFIX)/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX)/winstances.o ../src/winstances.cpp + +sunpro/libboost_regex$(LIBSUFFIX) : + mkdir -p sunpro/libboost_regex$(LIBSUFFIX) + +libboost_regex$(LIBSUFFIX)_clean : + rm -f sunpro/libboost_regex$(LIBSUFFIX)/*.o + rm -fr sunpro/libboost_regex$(LIBSUFFIX)/$(SUNWS_CACHE_NAME) + +sunpro/libboost_regex$(LIBSUFFIX).a : sunpro/libboost_regex$(LIBSUFFIX)/c_regex_traits.o sunpro/libboost_regex$(LIBSUFFIX)/cpp_regex_traits.o sunpro/libboost_regex$(LIBSUFFIX)/cregex.o sunpro/libboost_regex$(LIBSUFFIX)/fileiter.o sunpro/libboost_regex$(LIBSUFFIX)/icu.o sunpro/libboost_regex$(LIBSUFFIX)/instances.o sunpro/libboost_regex$(LIBSUFFIX)/posix_api.o sunpro/libboost_regex$(LIBSUFFIX)/regex.o sunpro/libboost_regex$(LIBSUFFIX)/regex_debug.o sunpro/libboost_regex$(LIBSUFFIX)/regex_raw_buffer.o sunpro/libboost_regex$(LIBSUFFIX)/regex_traits_defaults.o sunpro/libboost_regex$(LIBSUFFIX)/static_mutex.o sunpro/libboost_regex$(LIBSUFFIX)/usinstances.o sunpro/libboost_regex$(LIBSUFFIX)/w32_regex_traits.o sunpro/libboost_regex$(LIBSUFFIX)/wc_regex_traits.o sunpro/libboost_regex$(LIBSUFFIX)/wide_posix_api.o sunpro/libboost_regex$(LIBSUFFIX)/winstances.o + CC -xar $(CXXFLAGS) $(LDFLAGS) -o sunpro/libboost_regex$(LIBSUFFIX).a sunpro/libboost_regex$(LIBSUFFIX)/c_regex_traits.o sunpro/libboost_regex$(LIBSUFFIX)/cpp_regex_traits.o sunpro/libboost_regex$(LIBSUFFIX)/cregex.o sunpro/libboost_regex$(LIBSUFFIX)/fileiter.o sunpro/libboost_regex$(LIBSUFFIX)/icu.o sunpro/libboost_regex$(LIBSUFFIX)/instances.o sunpro/libboost_regex$(LIBSUFFIX)/posix_api.o sunpro/libboost_regex$(LIBSUFFIX)/regex.o sunpro/libboost_regex$(LIBSUFFIX)/regex_debug.o sunpro/libboost_regex$(LIBSUFFIX)/regex_raw_buffer.o sunpro/libboost_regex$(LIBSUFFIX)/regex_traits_defaults.o sunpro/libboost_regex$(LIBSUFFIX)/static_mutex.o sunpro/libboost_regex$(LIBSUFFIX)/usinstances.o sunpro/libboost_regex$(LIBSUFFIX)/w32_regex_traits.o sunpro/libboost_regex$(LIBSUFFIX)/wc_regex_traits.o sunpro/libboost_regex$(LIBSUFFIX)/wide_posix_api.o sunpro/libboost_regex$(LIBSUFFIX)/winstances.o + +######################################################## +# +# section for libboost_regex_mt$(LIBSUFFIX).a +# +######################################################## +sunpro/libboost_regex_mt$(LIBSUFFIX)/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/c_regex_traits.o ../src/c_regex_traits.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/cpp_regex_traits.o ../src/cpp_regex_traits.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/cregex.o ../src/cregex.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/fileiter.o ../src/fileiter.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/icu.o: ../src/icu.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/icu.o ../src/icu.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/instances.o: ../src/instances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/instances.o ../src/instances.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/posix_api.o ../src/posix_api.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/regex.o: ../src/regex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex.o ../src/regex.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_debug.o ../src/regex_debug.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_raw_buffer.o ../src/regex_raw_buffer.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_traits_defaults.o ../src/regex_traits_defaults.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/static_mutex.o ../src/static_mutex.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/usinstances.o ../src/usinstances.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/w32_regex_traits.o ../src/w32_regex_traits.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/wc_regex_traits.o ../src/wc_regex_traits.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/wide_posix_api.o ../src/wide_posix_api.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX)/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX)/winstances.o ../src/winstances.cpp + +sunpro/libboost_regex_mt$(LIBSUFFIX) : + mkdir -p sunpro/libboost_regex_mt$(LIBSUFFIX) + +libboost_regex_mt$(LIBSUFFIX)_clean : + rm -f sunpro/libboost_regex_mt$(LIBSUFFIX)/*.o + rm -fr sunpro/libboost_regex_mt$(LIBSUFFIX)/$(SUNWS_CACHE_NAME) + +sunpro/libboost_regex_mt$(LIBSUFFIX).a : sunpro/libboost_regex_mt$(LIBSUFFIX)/c_regex_traits.o sunpro/libboost_regex_mt$(LIBSUFFIX)/cpp_regex_traits.o sunpro/libboost_regex_mt$(LIBSUFFIX)/cregex.o sunpro/libboost_regex_mt$(LIBSUFFIX)/fileiter.o sunpro/libboost_regex_mt$(LIBSUFFIX)/icu.o sunpro/libboost_regex_mt$(LIBSUFFIX)/instances.o sunpro/libboost_regex_mt$(LIBSUFFIX)/posix_api.o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex.o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_debug.o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_raw_buffer.o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_traits_defaults.o sunpro/libboost_regex_mt$(LIBSUFFIX)/static_mutex.o sunpro/libboost_regex_mt$(LIBSUFFIX)/usinstances.o sunpro/libboost_regex_mt$(LIBSUFFIX)/w32_regex_traits.o sunpro/libboost_regex_mt$(LIBSUFFIX)/wc_regex_traits.o sunpro/libboost_regex_mt$(LIBSUFFIX)/wide_posix_api.o sunpro/libboost_regex_mt$(LIBSUFFIX)/winstances.o + CC -xar $(CXXFLAGS) $(LDFLAGS) -o sunpro/libboost_regex_mt$(LIBSUFFIX).a sunpro/libboost_regex_mt$(LIBSUFFIX)/c_regex_traits.o sunpro/libboost_regex_mt$(LIBSUFFIX)/cpp_regex_traits.o sunpro/libboost_regex_mt$(LIBSUFFIX)/cregex.o sunpro/libboost_regex_mt$(LIBSUFFIX)/fileiter.o sunpro/libboost_regex_mt$(LIBSUFFIX)/icu.o sunpro/libboost_regex_mt$(LIBSUFFIX)/instances.o sunpro/libboost_regex_mt$(LIBSUFFIX)/posix_api.o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex.o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_debug.o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_raw_buffer.o sunpro/libboost_regex_mt$(LIBSUFFIX)/regex_traits_defaults.o sunpro/libboost_regex_mt$(LIBSUFFIX)/static_mutex.o sunpro/libboost_regex_mt$(LIBSUFFIX)/usinstances.o sunpro/libboost_regex_mt$(LIBSUFFIX)/w32_regex_traits.o sunpro/libboost_regex_mt$(LIBSUFFIX)/wc_regex_traits.o sunpro/libboost_regex_mt$(LIBSUFFIX)/wide_posix_api.o sunpro/libboost_regex_mt$(LIBSUFFIX)/winstances.o + +######################################################## +# +# section for libboost_regex$(LIBSUFFIX).so +# +######################################################## +sunpro/shared_libboost_regex$(LIBSUFFIX)/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/c_regex_traits.o ../src/c_regex_traits.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/cpp_regex_traits.o ../src/cpp_regex_traits.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/cregex.o ../src/cregex.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/fileiter.o ../src/fileiter.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/icu.o: ../src/icu.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/icu.o ../src/icu.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/instances.o: ../src/instances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/instances.o ../src/instances.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/posix_api.o ../src/posix_api.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/regex.o: ../src/regex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex.o ../src/regex.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_debug.o ../src/regex_debug.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_raw_buffer.o ../src/regex_raw_buffer.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_traits_defaults.o ../src/regex_traits_defaults.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/static_mutex.o ../src/static_mutex.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/usinstances.o ../src/usinstances.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/w32_regex_traits.o ../src/w32_regex_traits.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/wc_regex_traits.o ../src/wc_regex_traits.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/wide_posix_api.o ../src/wide_posix_api.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX)/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex$(LIBSUFFIX)/winstances.o ../src/winstances.cpp + +sunpro/shared_libboost_regex$(LIBSUFFIX) : + mkdir -p sunpro/shared_libboost_regex$(LIBSUFFIX) + +libboost_regex$(LIBSUFFIX)_clean_shared : + rm -f sunpro/shared_libboost_regex$(LIBSUFFIX)/*.o + rm -fr sunpro/shared_libboost_regex$(LIBSUFFIX)/$(SUNWS_CACHE_NAME) + +sunpro/libboost_regex$(LIBSUFFIX).so : sunpro/shared_libboost_regex$(LIBSUFFIX)/c_regex_traits.o sunpro/shared_libboost_regex$(LIBSUFFIX)/cpp_regex_traits.o sunpro/shared_libboost_regex$(LIBSUFFIX)/cregex.o sunpro/shared_libboost_regex$(LIBSUFFIX)/fileiter.o sunpro/shared_libboost_regex$(LIBSUFFIX)/icu.o sunpro/shared_libboost_regex$(LIBSUFFIX)/instances.o sunpro/shared_libboost_regex$(LIBSUFFIX)/posix_api.o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex.o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_debug.o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_raw_buffer.o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_traits_defaults.o sunpro/shared_libboost_regex$(LIBSUFFIX)/static_mutex.o sunpro/shared_libboost_regex$(LIBSUFFIX)/usinstances.o sunpro/shared_libboost_regex$(LIBSUFFIX)/w32_regex_traits.o sunpro/shared_libboost_regex$(LIBSUFFIX)/wc_regex_traits.o sunpro/shared_libboost_regex$(LIBSUFFIX)/wide_posix_api.o sunpro/shared_libboost_regex$(LIBSUFFIX)/winstances.o + CC -KPIC -O2 -I../../../ -G -o sunpro/libboost_regex$(LIBSUFFIX).so $(LDFLAGS) sunpro/shared_libboost_regex$(LIBSUFFIX)/c_regex_traits.o sunpro/shared_libboost_regex$(LIBSUFFIX)/cpp_regex_traits.o sunpro/shared_libboost_regex$(LIBSUFFIX)/cregex.o sunpro/shared_libboost_regex$(LIBSUFFIX)/fileiter.o sunpro/shared_libboost_regex$(LIBSUFFIX)/icu.o sunpro/shared_libboost_regex$(LIBSUFFIX)/instances.o sunpro/shared_libboost_regex$(LIBSUFFIX)/posix_api.o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex.o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_debug.o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_raw_buffer.o sunpro/shared_libboost_regex$(LIBSUFFIX)/regex_traits_defaults.o sunpro/shared_libboost_regex$(LIBSUFFIX)/static_mutex.o sunpro/shared_libboost_regex$(LIBSUFFIX)/usinstances.o sunpro/shared_libboost_regex$(LIBSUFFIX)/w32_regex_traits.o sunpro/shared_libboost_regex$(LIBSUFFIX)/wc_regex_traits.o sunpro/shared_libboost_regex$(LIBSUFFIX)/wide_posix_api.o sunpro/shared_libboost_regex$(LIBSUFFIX)/winstances.o $(LIBS) + +######################################################## +# +# section for libboost_regex_mt$(LIBSUFFIX).so +# +######################################################## +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/c_regex_traits.o: ../src/c_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/c_regex_traits.o ../src/c_regex_traits.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/cpp_regex_traits.o: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/cpp_regex_traits.o ../src/cpp_regex_traits.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/cregex.o: ../src/cregex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/cregex.o ../src/cregex.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/fileiter.o: ../src/fileiter.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/fileiter.o ../src/fileiter.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/icu.o: ../src/icu.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/icu.o ../src/icu.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/instances.o: ../src/instances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/instances.o ../src/instances.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/posix_api.o: ../src/posix_api.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/posix_api.o ../src/posix_api.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex.o: ../src/regex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex.o ../src/regex.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_debug.o: ../src/regex_debug.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_debug.o ../src/regex_debug.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_raw_buffer.o: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_raw_buffer.o ../src/regex_raw_buffer.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_traits_defaults.o: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_traits_defaults.o ../src/regex_traits_defaults.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/static_mutex.o: ../src/static_mutex.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/static_mutex.o ../src/static_mutex.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/usinstances.o: ../src/usinstances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/usinstances.o ../src/usinstances.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/w32_regex_traits.o: ../src/w32_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/w32_regex_traits.o ../src/w32_regex_traits.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/wc_regex_traits.o: ../src/wc_regex_traits.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/wc_regex_traits.o ../src/wc_regex_traits.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/wide_posix_api.o: ../src/wide_posix_api.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/wide_posix_api.o ../src/wide_posix_api.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/winstances.o: ../src/winstances.cpp $(ALL_HEADER) + CC -c $(INCLUDES) -KPIC -O2 -mt -I../../../ $(CXXFLAGS) -o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/winstances.o ../src/winstances.cpp + +sunpro/shared_libboost_regex_mt$(LIBSUFFIX) : + mkdir -p sunpro/shared_libboost_regex_mt$(LIBSUFFIX) + +libboost_regex_mt$(LIBSUFFIX)_clean_shared : + rm -f sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/*.o + rm -fr sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/$(SUNWS_CACHE_NAME) + +sunpro/libboost_regex_mt$(LIBSUFFIX).so : sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/c_regex_traits.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/cpp_regex_traits.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/cregex.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/fileiter.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/icu.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/instances.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/posix_api.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_debug.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_raw_buffer.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_traits_defaults.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/static_mutex.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/usinstances.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/w32_regex_traits.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/wc_regex_traits.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/wide_posix_api.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/winstances.o + CC -KPIC -O2 -mt -I../../../ -G -o sunpro/libboost_regex_mt$(LIBSUFFIX).so $(LDFLAGS) sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/c_regex_traits.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/cpp_regex_traits.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/cregex.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/fileiter.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/icu.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/instances.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/posix_api.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_debug.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_raw_buffer.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/regex_traits_defaults.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/static_mutex.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/usinstances.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/w32_regex_traits.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/wc_regex_traits.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/wide_posix_api.o sunpro/shared_libboost_regex_mt$(LIBSUFFIX)/winstances.o $(LIBS) + diff --git a/libs/regex/build/vc10.mak b/libs/regex/build/vc10.mak new file mode 100644 index 0000000000..de8c5fdd02 --- /dev/null +++ b/libs/regex/build/vc10.mak @@ -0,0 +1,491 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for MSVC compiler +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# path to ICU library installation goes here: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" +MSVCDIR=$(VS100COMNTOOLS)..\..\VC +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc100-mt-s-1_47_dir ./vc100/libboost_regex-vc100-mt-s-1_47.lib libboost_regex-vc100-mt-sgd-1_47_dir ./vc100/libboost_regex-vc100-mt-sgd-1_47.lib boost_regex-vc100-mt-gd-1_47_dir ./vc100/boost_regex-vc100-mt-gd-1_47.lib boost_regex-vc100-mt-1_47_dir ./vc100/boost_regex-vc100-mt-1_47.lib libboost_regex-vc100-mt-1_47_dir ./vc100/libboost_regex-vc100-mt-1_47.lib libboost_regex-vc100-mt-gd-1_47_dir ./vc100/libboost_regex-vc100-mt-gd-1_47.lib + +clean : libboost_regex-vc100-mt-s-1_47_clean libboost_regex-vc100-mt-sgd-1_47_clean boost_regex-vc100-mt-gd-1_47_clean boost_regex-vc100-mt-1_47_clean libboost_regex-vc100-mt-1_47_clean libboost_regex-vc100-mt-gd-1_47_clean + +install : all + copy vc100\libboost_regex-vc100-mt-s-1_47.lib "$(MSVCDIR)\lib" + copy vc100\libboost_regex-vc100-mt-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc100\boost_regex-vc100-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc100\boost_regex-vc100-mt-gd-1_47.dll "$(MSVCDIR)\bin" + copy vc100\boost_regex-vc100-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc100\boost_regex-vc100-mt-1_47.dll "$(MSVCDIR)\bin" + copy vc100\libboost_regex-vc100-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc100\libboost_regex-vc100-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc100\libboost_regex-vc100-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc100\$(NULL)" mkdir vc100 + + +######################################################## +# +# section for libboost_regex-vc100-mt-s-1_47.lib +# +######################################################## +vc100/libboost_regex-vc100-mt-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/c_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/cregex.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/fileiter.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/icu.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/instances.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/posix_api.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/regex.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/regex_debug.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/static_mutex.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/usinstances.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/wide_posix_api.cpp + +vc100/libboost_regex-vc100-mt-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-s-1_47/ -Fdvc100/libboost_regex-vc100-mt-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc100-mt-s-1_47_dir : + @if not exist "vc100\libboost_regex-vc100-mt-s-1_47\$(NULL)" mkdir vc100\libboost_regex-vc100-mt-s-1_47 + +libboost_regex-vc100-mt-s-1_47_clean : + del vc100\libboost_regex-vc100-mt-s-1_47\*.obj + del vc100\libboost_regex-vc100-mt-s-1_47\*.idb + del vc100\libboost_regex-vc100-mt-s-1_47\*.exp + del vc100\libboost_regex-vc100-mt-s-1_47\*.pch + +./vc100/libboost_regex-vc100-mt-s-1_47.lib : vc100/libboost_regex-vc100-mt-s-1_47/c_regex_traits.obj vc100/libboost_regex-vc100-mt-s-1_47/cpp_regex_traits.obj vc100/libboost_regex-vc100-mt-s-1_47/cregex.obj vc100/libboost_regex-vc100-mt-s-1_47/fileiter.obj vc100/libboost_regex-vc100-mt-s-1_47/icu.obj vc100/libboost_regex-vc100-mt-s-1_47/instances.obj vc100/libboost_regex-vc100-mt-s-1_47/posix_api.obj vc100/libboost_regex-vc100-mt-s-1_47/regex.obj vc100/libboost_regex-vc100-mt-s-1_47/regex_debug.obj vc100/libboost_regex-vc100-mt-s-1_47/regex_raw_buffer.obj vc100/libboost_regex-vc100-mt-s-1_47/regex_traits_defaults.obj vc100/libboost_regex-vc100-mt-s-1_47/static_mutex.obj vc100/libboost_regex-vc100-mt-s-1_47/usinstances.obj vc100/libboost_regex-vc100-mt-s-1_47/w32_regex_traits.obj vc100/libboost_regex-vc100-mt-s-1_47/wc_regex_traits.obj vc100/libboost_regex-vc100-mt-s-1_47/wide_posix_api.obj vc100/libboost_regex-vc100-mt-s-1_47/winstances.obj + link -lib /nologo /out:vc100/libboost_regex-vc100-mt-s-1_47.lib $(XSFLAGS) vc100/libboost_regex-vc100-mt-s-1_47/c_regex_traits.obj vc100/libboost_regex-vc100-mt-s-1_47/cpp_regex_traits.obj vc100/libboost_regex-vc100-mt-s-1_47/cregex.obj vc100/libboost_regex-vc100-mt-s-1_47/fileiter.obj vc100/libboost_regex-vc100-mt-s-1_47/icu.obj vc100/libboost_regex-vc100-mt-s-1_47/instances.obj vc100/libboost_regex-vc100-mt-s-1_47/posix_api.obj vc100/libboost_regex-vc100-mt-s-1_47/regex.obj vc100/libboost_regex-vc100-mt-s-1_47/regex_debug.obj vc100/libboost_regex-vc100-mt-s-1_47/regex_raw_buffer.obj vc100/libboost_regex-vc100-mt-s-1_47/regex_traits_defaults.obj vc100/libboost_regex-vc100-mt-s-1_47/static_mutex.obj vc100/libboost_regex-vc100-mt-s-1_47/usinstances.obj vc100/libboost_regex-vc100-mt-s-1_47/w32_regex_traits.obj vc100/libboost_regex-vc100-mt-s-1_47/wc_regex_traits.obj vc100/libboost_regex-vc100-mt-s-1_47/wide_posix_api.obj vc100/libboost_regex-vc100-mt-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc100-mt-sgd-1_47.lib +# +######################################################## +vc100/libboost_regex-vc100-mt-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/cregex.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/fileiter.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/icu.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/instances.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/posix_api.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/regex.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/regex_debug.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/static_mutex.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/usinstances.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc100/libboost_regex-vc100-mt-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-sgd-1_47/ -Fdvc100/libboost_regex-vc100-mt-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc100-mt-sgd-1_47_dir : + @if not exist "vc100\libboost_regex-vc100-mt-sgd-1_47\$(NULL)" mkdir vc100\libboost_regex-vc100-mt-sgd-1_47 + +libboost_regex-vc100-mt-sgd-1_47_clean : + del vc100\libboost_regex-vc100-mt-sgd-1_47\*.obj + del vc100\libboost_regex-vc100-mt-sgd-1_47\*.idb + del vc100\libboost_regex-vc100-mt-sgd-1_47\*.exp + del vc100\libboost_regex-vc100-mt-sgd-1_47\*.pch + +./vc100/libboost_regex-vc100-mt-sgd-1_47.lib : vc100/libboost_regex-vc100-mt-sgd-1_47/c_regex_traits.obj vc100/libboost_regex-vc100-mt-sgd-1_47/cpp_regex_traits.obj vc100/libboost_regex-vc100-mt-sgd-1_47/cregex.obj vc100/libboost_regex-vc100-mt-sgd-1_47/fileiter.obj vc100/libboost_regex-vc100-mt-sgd-1_47/icu.obj vc100/libboost_regex-vc100-mt-sgd-1_47/instances.obj vc100/libboost_regex-vc100-mt-sgd-1_47/posix_api.obj vc100/libboost_regex-vc100-mt-sgd-1_47/regex.obj vc100/libboost_regex-vc100-mt-sgd-1_47/regex_debug.obj vc100/libboost_regex-vc100-mt-sgd-1_47/regex_raw_buffer.obj vc100/libboost_regex-vc100-mt-sgd-1_47/regex_traits_defaults.obj vc100/libboost_regex-vc100-mt-sgd-1_47/static_mutex.obj vc100/libboost_regex-vc100-mt-sgd-1_47/usinstances.obj vc100/libboost_regex-vc100-mt-sgd-1_47/w32_regex_traits.obj vc100/libboost_regex-vc100-mt-sgd-1_47/wc_regex_traits.obj vc100/libboost_regex-vc100-mt-sgd-1_47/wide_posix_api.obj vc100/libboost_regex-vc100-mt-sgd-1_47/winstances.obj + link -lib /nologo /out:vc100/libboost_regex-vc100-mt-sgd-1_47.lib $(XSFLAGS) vc100/libboost_regex-vc100-mt-sgd-1_47/c_regex_traits.obj vc100/libboost_regex-vc100-mt-sgd-1_47/cpp_regex_traits.obj vc100/libboost_regex-vc100-mt-sgd-1_47/cregex.obj vc100/libboost_regex-vc100-mt-sgd-1_47/fileiter.obj vc100/libboost_regex-vc100-mt-sgd-1_47/icu.obj vc100/libboost_regex-vc100-mt-sgd-1_47/instances.obj vc100/libboost_regex-vc100-mt-sgd-1_47/posix_api.obj vc100/libboost_regex-vc100-mt-sgd-1_47/regex.obj vc100/libboost_regex-vc100-mt-sgd-1_47/regex_debug.obj vc100/libboost_regex-vc100-mt-sgd-1_47/regex_raw_buffer.obj vc100/libboost_regex-vc100-mt-sgd-1_47/regex_traits_defaults.obj vc100/libboost_regex-vc100-mt-sgd-1_47/static_mutex.obj vc100/libboost_regex-vc100-mt-sgd-1_47/usinstances.obj vc100/libboost_regex-vc100-mt-sgd-1_47/w32_regex_traits.obj vc100/libboost_regex-vc100-mt-sgd-1_47/wc_regex_traits.obj vc100/libboost_regex-vc100-mt-sgd-1_47/wide_posix_api.obj vc100/libboost_regex-vc100-mt-sgd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc100-mt-gd-1_47.lib +# +######################################################## +vc100/boost_regex-vc100-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/cregex.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/icu.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/instances.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/regex.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc100/boost_regex-vc100-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-gd-1_47/ -Fdvc100/boost_regex-vc100-mt-gd-1_47.pdb ../src/winstances.cpp + +boost_regex-vc100-mt-gd-1_47_dir : + @if not exist "vc100\boost_regex-vc100-mt-gd-1_47\$(NULL)" mkdir vc100\boost_regex-vc100-mt-gd-1_47 + +boost_regex-vc100-mt-gd-1_47_clean : + del vc100\boost_regex-vc100-mt-gd-1_47\*.obj + del vc100\boost_regex-vc100-mt-gd-1_47\*.idb + del vc100\boost_regex-vc100-mt-gd-1_47\*.exp + del vc100\boost_regex-vc100-mt-gd-1_47\*.pch + +./vc100/boost_regex-vc100-mt-gd-1_47.lib : vc100/boost_regex-vc100-mt-gd-1_47/c_regex_traits.obj vc100/boost_regex-vc100-mt-gd-1_47/cpp_regex_traits.obj vc100/boost_regex-vc100-mt-gd-1_47/cregex.obj vc100/boost_regex-vc100-mt-gd-1_47/fileiter.obj vc100/boost_regex-vc100-mt-gd-1_47/icu.obj vc100/boost_regex-vc100-mt-gd-1_47/instances.obj vc100/boost_regex-vc100-mt-gd-1_47/posix_api.obj vc100/boost_regex-vc100-mt-gd-1_47/regex.obj vc100/boost_regex-vc100-mt-gd-1_47/regex_debug.obj vc100/boost_regex-vc100-mt-gd-1_47/regex_raw_buffer.obj vc100/boost_regex-vc100-mt-gd-1_47/regex_traits_defaults.obj vc100/boost_regex-vc100-mt-gd-1_47/static_mutex.obj vc100/boost_regex-vc100-mt-gd-1_47/usinstances.obj vc100/boost_regex-vc100-mt-gd-1_47/w32_regex_traits.obj vc100/boost_regex-vc100-mt-gd-1_47/wc_regex_traits.obj vc100/boost_regex-vc100-mt-gd-1_47/wide_posix_api.obj vc100/boost_regex-vc100-mt-gd-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc100/boost_regex-vc100-mt-gd-1_47.pdb" /debug /machine:I386 /out:"vc100/boost_regex-vc100-mt-gd-1_47.dll" /implib:"vc100/boost_regex-vc100-mt-gd-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc100/boost_regex-vc100-mt-gd-1_47/c_regex_traits.obj vc100/boost_regex-vc100-mt-gd-1_47/cpp_regex_traits.obj vc100/boost_regex-vc100-mt-gd-1_47/cregex.obj vc100/boost_regex-vc100-mt-gd-1_47/fileiter.obj vc100/boost_regex-vc100-mt-gd-1_47/icu.obj vc100/boost_regex-vc100-mt-gd-1_47/instances.obj vc100/boost_regex-vc100-mt-gd-1_47/posix_api.obj vc100/boost_regex-vc100-mt-gd-1_47/regex.obj vc100/boost_regex-vc100-mt-gd-1_47/regex_debug.obj vc100/boost_regex-vc100-mt-gd-1_47/regex_raw_buffer.obj vc100/boost_regex-vc100-mt-gd-1_47/regex_traits_defaults.obj vc100/boost_regex-vc100-mt-gd-1_47/static_mutex.obj vc100/boost_regex-vc100-mt-gd-1_47/usinstances.obj vc100/boost_regex-vc100-mt-gd-1_47/w32_regex_traits.obj vc100/boost_regex-vc100-mt-gd-1_47/wc_regex_traits.obj vc100/boost_regex-vc100-mt-gd-1_47/wide_posix_api.obj vc100/boost_regex-vc100-mt-gd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc100-mt-1_47.lib +# +######################################################## +vc100/boost_regex-vc100-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc100/boost_regex-vc100-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc100/boost_regex-vc100-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/cregex.cpp + +vc100/boost_regex-vc100-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/fileiter.cpp + +vc100/boost_regex-vc100-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/icu.cpp + +vc100/boost_regex-vc100-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/instances.cpp + +vc100/boost_regex-vc100-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/posix_api.cpp + +vc100/boost_regex-vc100-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/regex.cpp + +vc100/boost_regex-vc100-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/regex_debug.cpp + +vc100/boost_regex-vc100-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc100/boost_regex-vc100-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc100/boost_regex-vc100-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/static_mutex.cpp + +vc100/boost_regex-vc100-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/usinstances.cpp + +vc100/boost_regex-vc100-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc100/boost_regex-vc100-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc100/boost_regex-vc100-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc100/boost_regex-vc100-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/boost_regex-vc100-mt-1_47/ -Fdvc100/boost_regex-vc100-mt-1_47.pdb ../src/winstances.cpp + +boost_regex-vc100-mt-1_47_dir : + @if not exist "vc100\boost_regex-vc100-mt-1_47\$(NULL)" mkdir vc100\boost_regex-vc100-mt-1_47 + +boost_regex-vc100-mt-1_47_clean : + del vc100\boost_regex-vc100-mt-1_47\*.obj + del vc100\boost_regex-vc100-mt-1_47\*.idb + del vc100\boost_regex-vc100-mt-1_47\*.exp + del vc100\boost_regex-vc100-mt-1_47\*.pch + +./vc100/boost_regex-vc100-mt-1_47.lib : vc100/boost_regex-vc100-mt-1_47/c_regex_traits.obj vc100/boost_regex-vc100-mt-1_47/cpp_regex_traits.obj vc100/boost_regex-vc100-mt-1_47/cregex.obj vc100/boost_regex-vc100-mt-1_47/fileiter.obj vc100/boost_regex-vc100-mt-1_47/icu.obj vc100/boost_regex-vc100-mt-1_47/instances.obj vc100/boost_regex-vc100-mt-1_47/posix_api.obj vc100/boost_regex-vc100-mt-1_47/regex.obj vc100/boost_regex-vc100-mt-1_47/regex_debug.obj vc100/boost_regex-vc100-mt-1_47/regex_raw_buffer.obj vc100/boost_regex-vc100-mt-1_47/regex_traits_defaults.obj vc100/boost_regex-vc100-mt-1_47/static_mutex.obj vc100/boost_regex-vc100-mt-1_47/usinstances.obj vc100/boost_regex-vc100-mt-1_47/w32_regex_traits.obj vc100/boost_regex-vc100-mt-1_47/wc_regex_traits.obj vc100/boost_regex-vc100-mt-1_47/wide_posix_api.obj vc100/boost_regex-vc100-mt-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc100/boost_regex-vc100-mt-1_47.pdb" /debug /machine:I386 /out:"vc100/boost_regex-vc100-mt-1_47.dll" /implib:"vc100/boost_regex-vc100-mt-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc100/boost_regex-vc100-mt-1_47/c_regex_traits.obj vc100/boost_regex-vc100-mt-1_47/cpp_regex_traits.obj vc100/boost_regex-vc100-mt-1_47/cregex.obj vc100/boost_regex-vc100-mt-1_47/fileiter.obj vc100/boost_regex-vc100-mt-1_47/icu.obj vc100/boost_regex-vc100-mt-1_47/instances.obj vc100/boost_regex-vc100-mt-1_47/posix_api.obj vc100/boost_regex-vc100-mt-1_47/regex.obj vc100/boost_regex-vc100-mt-1_47/regex_debug.obj vc100/boost_regex-vc100-mt-1_47/regex_raw_buffer.obj vc100/boost_regex-vc100-mt-1_47/regex_traits_defaults.obj vc100/boost_regex-vc100-mt-1_47/static_mutex.obj vc100/boost_regex-vc100-mt-1_47/usinstances.obj vc100/boost_regex-vc100-mt-1_47/w32_regex_traits.obj vc100/boost_regex-vc100-mt-1_47/wc_regex_traits.obj vc100/boost_regex-vc100-mt-1_47/wide_posix_api.obj vc100/boost_regex-vc100-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc100-mt-1_47.lib +# +######################################################## +vc100/libboost_regex-vc100-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/cregex.cpp + +vc100/libboost_regex-vc100-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/fileiter.cpp + +vc100/libboost_regex-vc100-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/icu.cpp + +vc100/libboost_regex-vc100-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/instances.cpp + +vc100/libboost_regex-vc100-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/posix_api.cpp + +vc100/libboost_regex-vc100-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/regex.cpp + +vc100/libboost_regex-vc100-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/regex_debug.cpp + +vc100/libboost_regex-vc100-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc100/libboost_regex-vc100-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc100/libboost_regex-vc100-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/static_mutex.cpp + +vc100/libboost_regex-vc100-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/usinstances.cpp + +vc100/libboost_regex-vc100-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc100/libboost_regex-vc100-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-1_47/ -Fdvc100/libboost_regex-vc100-mt-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc100-mt-1_47_dir : + @if not exist "vc100\libboost_regex-vc100-mt-1_47\$(NULL)" mkdir vc100\libboost_regex-vc100-mt-1_47 + +libboost_regex-vc100-mt-1_47_clean : + del vc100\libboost_regex-vc100-mt-1_47\*.obj + del vc100\libboost_regex-vc100-mt-1_47\*.idb + del vc100\libboost_regex-vc100-mt-1_47\*.exp + del vc100\libboost_regex-vc100-mt-1_47\*.pch + +./vc100/libboost_regex-vc100-mt-1_47.lib : vc100/libboost_regex-vc100-mt-1_47/c_regex_traits.obj vc100/libboost_regex-vc100-mt-1_47/cpp_regex_traits.obj vc100/libboost_regex-vc100-mt-1_47/cregex.obj vc100/libboost_regex-vc100-mt-1_47/fileiter.obj vc100/libboost_regex-vc100-mt-1_47/icu.obj vc100/libboost_regex-vc100-mt-1_47/instances.obj vc100/libboost_regex-vc100-mt-1_47/posix_api.obj vc100/libboost_regex-vc100-mt-1_47/regex.obj vc100/libboost_regex-vc100-mt-1_47/regex_debug.obj vc100/libboost_regex-vc100-mt-1_47/regex_raw_buffer.obj vc100/libboost_regex-vc100-mt-1_47/regex_traits_defaults.obj vc100/libboost_regex-vc100-mt-1_47/static_mutex.obj vc100/libboost_regex-vc100-mt-1_47/usinstances.obj vc100/libboost_regex-vc100-mt-1_47/w32_regex_traits.obj vc100/libboost_regex-vc100-mt-1_47/wc_regex_traits.obj vc100/libboost_regex-vc100-mt-1_47/wide_posix_api.obj vc100/libboost_regex-vc100-mt-1_47/winstances.obj + link -lib /nologo /out:vc100/libboost_regex-vc100-mt-1_47.lib $(XSFLAGS) vc100/libboost_regex-vc100-mt-1_47/c_regex_traits.obj vc100/libboost_regex-vc100-mt-1_47/cpp_regex_traits.obj vc100/libboost_regex-vc100-mt-1_47/cregex.obj vc100/libboost_regex-vc100-mt-1_47/fileiter.obj vc100/libboost_regex-vc100-mt-1_47/icu.obj vc100/libboost_regex-vc100-mt-1_47/instances.obj vc100/libboost_regex-vc100-mt-1_47/posix_api.obj vc100/libboost_regex-vc100-mt-1_47/regex.obj vc100/libboost_regex-vc100-mt-1_47/regex_debug.obj vc100/libboost_regex-vc100-mt-1_47/regex_raw_buffer.obj vc100/libboost_regex-vc100-mt-1_47/regex_traits_defaults.obj vc100/libboost_regex-vc100-mt-1_47/static_mutex.obj vc100/libboost_regex-vc100-mt-1_47/usinstances.obj vc100/libboost_regex-vc100-mt-1_47/w32_regex_traits.obj vc100/libboost_regex-vc100-mt-1_47/wc_regex_traits.obj vc100/libboost_regex-vc100-mt-1_47/wide_posix_api.obj vc100/libboost_regex-vc100-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc100-mt-gd-1_47.lib +# +######################################################## +vc100/libboost_regex-vc100-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/cregex.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/icu.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/instances.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/regex.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc100/libboost_regex-vc100-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc100/libboost_regex-vc100-mt-gd-1_47/ -Fdvc100/libboost_regex-vc100-mt-gd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc100-mt-gd-1_47_dir : + @if not exist "vc100\libboost_regex-vc100-mt-gd-1_47\$(NULL)" mkdir vc100\libboost_regex-vc100-mt-gd-1_47 + +libboost_regex-vc100-mt-gd-1_47_clean : + del vc100\libboost_regex-vc100-mt-gd-1_47\*.obj + del vc100\libboost_regex-vc100-mt-gd-1_47\*.idb + del vc100\libboost_regex-vc100-mt-gd-1_47\*.exp + del vc100\libboost_regex-vc100-mt-gd-1_47\*.pch + +./vc100/libboost_regex-vc100-mt-gd-1_47.lib : vc100/libboost_regex-vc100-mt-gd-1_47/c_regex_traits.obj vc100/libboost_regex-vc100-mt-gd-1_47/cpp_regex_traits.obj vc100/libboost_regex-vc100-mt-gd-1_47/cregex.obj vc100/libboost_regex-vc100-mt-gd-1_47/fileiter.obj vc100/libboost_regex-vc100-mt-gd-1_47/icu.obj vc100/libboost_regex-vc100-mt-gd-1_47/instances.obj vc100/libboost_regex-vc100-mt-gd-1_47/posix_api.obj vc100/libboost_regex-vc100-mt-gd-1_47/regex.obj vc100/libboost_regex-vc100-mt-gd-1_47/regex_debug.obj vc100/libboost_regex-vc100-mt-gd-1_47/regex_raw_buffer.obj vc100/libboost_regex-vc100-mt-gd-1_47/regex_traits_defaults.obj vc100/libboost_regex-vc100-mt-gd-1_47/static_mutex.obj vc100/libboost_regex-vc100-mt-gd-1_47/usinstances.obj vc100/libboost_regex-vc100-mt-gd-1_47/w32_regex_traits.obj vc100/libboost_regex-vc100-mt-gd-1_47/wc_regex_traits.obj vc100/libboost_regex-vc100-mt-gd-1_47/wide_posix_api.obj vc100/libboost_regex-vc100-mt-gd-1_47/winstances.obj + link -lib /nologo /out:vc100/libboost_regex-vc100-mt-gd-1_47.lib $(XSFLAGS) vc100/libboost_regex-vc100-mt-gd-1_47/c_regex_traits.obj vc100/libboost_regex-vc100-mt-gd-1_47/cpp_regex_traits.obj vc100/libboost_regex-vc100-mt-gd-1_47/cregex.obj vc100/libboost_regex-vc100-mt-gd-1_47/fileiter.obj vc100/libboost_regex-vc100-mt-gd-1_47/icu.obj vc100/libboost_regex-vc100-mt-gd-1_47/instances.obj vc100/libboost_regex-vc100-mt-gd-1_47/posix_api.obj vc100/libboost_regex-vc100-mt-gd-1_47/regex.obj vc100/libboost_regex-vc100-mt-gd-1_47/regex_debug.obj vc100/libboost_regex-vc100-mt-gd-1_47/regex_raw_buffer.obj vc100/libboost_regex-vc100-mt-gd-1_47/regex_traits_defaults.obj vc100/libboost_regex-vc100-mt-gd-1_47/static_mutex.obj vc100/libboost_regex-vc100-mt-gd-1_47/usinstances.obj vc100/libboost_regex-vc100-mt-gd-1_47/w32_regex_traits.obj vc100/libboost_regex-vc100-mt-gd-1_47/wc_regex_traits.obj vc100/libboost_regex-vc100-mt-gd-1_47/wide_posix_api.obj vc100/libboost_regex-vc100-mt-gd-1_47/winstances.obj + diff --git a/libs/regex/build/vc6-stlport.mak b/libs/regex/build/vc6-stlport.mak new file mode 100644 index 0000000000..b367e6463f --- /dev/null +++ b/libs/regex/build/vc6-stlport.mak @@ -0,0 +1,496 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for VC6+STLPort +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# ICU setup: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(STLPORT_PATH)" == "" +!ERROR Variable STLPORT_PATH not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc6-mt-sp-1_47_dir ./vc6-stlport/libboost_regex-vc6-mt-sp-1_47.lib boost_regex-vc6-mt-p-1_47_dir ./vc6-stlport/boost_regex-vc6-mt-p-1_47.lib libboost_regex-vc6-mt-p-1_47_dir ./vc6-stlport/libboost_regex-vc6-mt-p-1_47.lib boost_regex-vc6-mt-gdp-1_47_dir ./vc6-stlport/boost_regex-vc6-mt-gdp-1_47.lib libboost_regex-vc6-mt-sgdp-1_47_dir ./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.lib libboost_regex-vc6-mt-gdp-1_47_dir ./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47.lib + +clean : libboost_regex-vc6-mt-sp-1_47_clean boost_regex-vc6-mt-p-1_47_clean libboost_regex-vc6-mt-p-1_47_clean boost_regex-vc6-mt-gdp-1_47_clean libboost_regex-vc6-mt-sgdp-1_47_clean libboost_regex-vc6-mt-gdp-1_47_clean + +install : stlport_check all + copy vc6-stlport\libboost_regex-vc6-mt-sp-1_47.lib "$(MSVCDIR)\lib" + copy vc6-stlport\boost_regex-vc6-mt-p-1_47.lib "$(MSVCDIR)\lib" + copy vc6-stlport\boost_regex-vc6-mt-p-1_47.dll "$(MSVCDIR)\bin" + copy vc6-stlport\libboost_regex-vc6-mt-p-1_47.lib "$(MSVCDIR)\lib" + copy vc6-stlport\boost_regex-vc6-mt-gdp-1_47.lib "$(MSVCDIR)\lib" + copy vc6-stlport\boost_regex-vc6-mt-gdp-1_47.dll "$(MSVCDIR)\bin" + copy vc6-stlport\boost_regex-vc6-mt-gdp-1_47.pdb "$(MSVCDIR)\lib" + copy vc6-stlport\libboost_regex-vc6-mt-sgdp-1_47.lib "$(MSVCDIR)\lib" + copy vc6-stlport\libboost_regex-vc6-mt-sgdp-1_47.pdb "$(MSVCDIR)\lib" + copy vc6-stlport\libboost_regex-vc6-mt-gdp-1_47.lib "$(MSVCDIR)\lib" + copy vc6-stlport\libboost_regex-vc6-mt-gdp-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc6-stlport\$(NULL)" mkdir vc6-stlport + +stlport_check : "$(STLPORT_PATH)\stlport\string" + echo + + +######################################################## +# +# section for libboost_regex-vc6-mt-sp-1_47.lib +# +######################################################## +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/c_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/cregex.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/fileiter.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/icu.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/instances.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/posix_api.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/regex.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/regex_debug.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/static_mutex.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/usinstances.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/w32_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/wc_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/wide_posix_api.cpp + +vc6-stlport/libboost_regex-vc6-mt-sp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-mt-sp-1_47_dir : + @if not exist "vc6-stlport\libboost_regex-vc6-mt-sp-1_47\$(NULL)" mkdir vc6-stlport\libboost_regex-vc6-mt-sp-1_47 + +libboost_regex-vc6-mt-sp-1_47_clean : + del vc6-stlport\libboost_regex-vc6-mt-sp-1_47\*.obj + del vc6-stlport\libboost_regex-vc6-mt-sp-1_47\*.idb + del vc6-stlport\libboost_regex-vc6-mt-sp-1_47\*.exp + del vc6-stlport\libboost_regex-vc6-mt-sp-1_47\*.pch + +./vc6-stlport/libboost_regex-vc6-mt-sp-1_47.lib : vc6-stlport/libboost_regex-vc6-mt-sp-1_47/c_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/cpp_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/cregex.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/fileiter.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/icu.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/instances.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/posix_api.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_debug.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_raw_buffer.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_traits_defaults.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/static_mutex.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/usinstances.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/w32_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/wc_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/wide_posix_api.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/winstances.obj + link -lib /nologo /out:vc6-stlport/libboost_regex-vc6-mt-sp-1_47.lib $(XSFLAGS) vc6-stlport/libboost_regex-vc6-mt-sp-1_47/c_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/cpp_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/cregex.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/fileiter.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/icu.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/instances.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/posix_api.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_debug.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_raw_buffer.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/regex_traits_defaults.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/static_mutex.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/usinstances.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/w32_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/wc_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/wide_posix_api.obj vc6-stlport/libboost_regex-vc6-mt-sp-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc6-mt-p-1_47.lib +# +######################################################## +vc6-stlport/boost_regex-vc6-mt-p-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/c_regex_traits.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/cregex.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/fileiter.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/icu.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/instances.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/posix_api.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/regex.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/regex_debug.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/static_mutex.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/usinstances.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/w32_regex_traits.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/wc_regex_traits.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/wide_posix_api.cpp + +vc6-stlport/boost_regex-vc6-mt-p-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-p-1_47.pdb ../src/winstances.cpp + +boost_regex-vc6-mt-p-1_47_dir : + @if not exist "vc6-stlport\boost_regex-vc6-mt-p-1_47\$(NULL)" mkdir vc6-stlport\boost_regex-vc6-mt-p-1_47 + +boost_regex-vc6-mt-p-1_47_clean : + del vc6-stlport\boost_regex-vc6-mt-p-1_47\*.obj + del vc6-stlport\boost_regex-vc6-mt-p-1_47\*.idb + del vc6-stlport\boost_regex-vc6-mt-p-1_47\*.exp + del vc6-stlport\boost_regex-vc6-mt-p-1_47\*.pch + +./vc6-stlport/boost_regex-vc6-mt-p-1_47.lib : vc6-stlport/boost_regex-vc6-mt-p-1_47/c_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/cpp_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/cregex.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/fileiter.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/icu.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/instances.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/posix_api.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/regex.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_debug.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_raw_buffer.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_traits_defaults.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/static_mutex.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/usinstances.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/w32_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/wc_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/wide_posix_api.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc6-stlport/boost_regex-vc6-mt-p-1_47.pdb" /debug /machine:I386 /out:"vc6-stlport/boost_regex-vc6-mt-p-1_47.dll" /implib:"vc6-stlport/boost_regex-vc6-mt-p-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc6-stlport/boost_regex-vc6-mt-p-1_47/c_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/cpp_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/cregex.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/fileiter.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/icu.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/instances.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/posix_api.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/regex.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_debug.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_raw_buffer.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/regex_traits_defaults.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/static_mutex.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/usinstances.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/w32_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/wc_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/wide_posix_api.obj vc6-stlport/boost_regex-vc6-mt-p-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc6-mt-p-1_47.lib +# +######################################################## +vc6-stlport/libboost_regex-vc6-mt-p-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/c_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/cregex.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/fileiter.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/icu.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/instances.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/posix_api.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/regex.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/regex_debug.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/static_mutex.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/usinstances.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/w32_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/wc_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/wide_posix_api.cpp + +vc6-stlport/libboost_regex-vc6-mt-p-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-p-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-p-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-mt-p-1_47_dir : + @if not exist "vc6-stlport\libboost_regex-vc6-mt-p-1_47\$(NULL)" mkdir vc6-stlport\libboost_regex-vc6-mt-p-1_47 + +libboost_regex-vc6-mt-p-1_47_clean : + del vc6-stlport\libboost_regex-vc6-mt-p-1_47\*.obj + del vc6-stlport\libboost_regex-vc6-mt-p-1_47\*.idb + del vc6-stlport\libboost_regex-vc6-mt-p-1_47\*.exp + del vc6-stlport\libboost_regex-vc6-mt-p-1_47\*.pch + +./vc6-stlport/libboost_regex-vc6-mt-p-1_47.lib : vc6-stlport/libboost_regex-vc6-mt-p-1_47/c_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/cpp_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/cregex.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/fileiter.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/icu.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/instances.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/posix_api.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_debug.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_raw_buffer.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_traits_defaults.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/static_mutex.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/usinstances.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/w32_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/wc_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/wide_posix_api.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/winstances.obj + link -lib /nologo /out:vc6-stlport/libboost_regex-vc6-mt-p-1_47.lib $(XSFLAGS) vc6-stlport/libboost_regex-vc6-mt-p-1_47/c_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/cpp_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/cregex.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/fileiter.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/icu.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/instances.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/posix_api.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_debug.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_raw_buffer.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/regex_traits_defaults.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/static_mutex.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/usinstances.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/w32_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/wc_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/wide_posix_api.obj vc6-stlport/libboost_regex-vc6-mt-p-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc6-mt-gdp-1_47.lib +# +######################################################## +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/c_regex_traits.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/cregex.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/fileiter.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/icu.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/instances.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/posix_api.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/regex.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/regex_debug.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/static_mutex.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/usinstances.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/wide_posix_api.cpp + +vc6-stlport/boost_regex-vc6-mt-gdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/boost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb ../src/winstances.cpp + +boost_regex-vc6-mt-gdp-1_47_dir : + @if not exist "vc6-stlport\boost_regex-vc6-mt-gdp-1_47\$(NULL)" mkdir vc6-stlport\boost_regex-vc6-mt-gdp-1_47 + +boost_regex-vc6-mt-gdp-1_47_clean : + del vc6-stlport\boost_regex-vc6-mt-gdp-1_47\*.obj + del vc6-stlport\boost_regex-vc6-mt-gdp-1_47\*.idb + del vc6-stlport\boost_regex-vc6-mt-gdp-1_47\*.exp + del vc6-stlport\boost_regex-vc6-mt-gdp-1_47\*.pch + +./vc6-stlport/boost_regex-vc6-mt-gdp-1_47.lib : vc6-stlport/boost_regex-vc6-mt-gdp-1_47/c_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/cpp_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/cregex.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/fileiter.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/icu.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/instances.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/posix_api.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_debug.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_raw_buffer.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_traits_defaults.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/static_mutex.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/usinstances.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/w32_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/wc_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/wide_posix_api.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc6-stlport/boost_regex-vc6-mt-gdp-1_47.pdb" /debug /machine:I386 /out:"vc6-stlport/boost_regex-vc6-mt-gdp-1_47.dll" /implib:"vc6-stlport/boost_regex-vc6-mt-gdp-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc6-stlport/boost_regex-vc6-mt-gdp-1_47/c_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/cpp_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/cregex.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/fileiter.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/icu.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/instances.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/posix_api.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_debug.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_raw_buffer.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/regex_traits_defaults.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/static_mutex.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/usinstances.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/w32_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/wc_regex_traits.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/wide_posix_api.obj vc6-stlport/boost_regex-vc6-mt-gdp-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc6-mt-sgdp-1_47.lib +# +######################################################## +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/c_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/cregex.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/fileiter.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/icu.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/instances.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/posix_api.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/regex.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/regex_debug.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/static_mutex.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/usinstances.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/wide_posix_api.cpp + +vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-mt-sgdp-1_47_dir : + @if not exist "vc6-stlport\libboost_regex-vc6-mt-sgdp-1_47\$(NULL)" mkdir vc6-stlport\libboost_regex-vc6-mt-sgdp-1_47 + +libboost_regex-vc6-mt-sgdp-1_47_clean : + del vc6-stlport\libboost_regex-vc6-mt-sgdp-1_47\*.obj + del vc6-stlport\libboost_regex-vc6-mt-sgdp-1_47\*.idb + del vc6-stlport\libboost_regex-vc6-mt-sgdp-1_47\*.exp + del vc6-stlport\libboost_regex-vc6-mt-sgdp-1_47\*.pch + +./vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.lib : vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/c_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/cpp_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/cregex.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/fileiter.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/icu.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/instances.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/posix_api.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_debug.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_raw_buffer.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_traits_defaults.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/static_mutex.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/usinstances.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/w32_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/wc_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/wide_posix_api.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/winstances.obj + link -lib /nologo /out:vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47.lib $(XSFLAGS) vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/c_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/cpp_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/cregex.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/fileiter.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/icu.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/instances.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/posix_api.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_debug.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_raw_buffer.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/regex_traits_defaults.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/static_mutex.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/usinstances.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/w32_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/wc_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/wide_posix_api.obj vc6-stlport/libboost_regex-vc6-mt-sgdp-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc6-mt-gdp-1_47.lib +# +######################################################## +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/c_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/cregex.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/fileiter.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/icu.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/instances.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/posix_api.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/regex.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/regex_debug.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/static_mutex.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/usinstances.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/wide_posix_api.cpp + +vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/ -Fdvc6-stlport/libboost_regex-vc6-mt-gdp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-mt-gdp-1_47_dir : + @if not exist "vc6-stlport\libboost_regex-vc6-mt-gdp-1_47\$(NULL)" mkdir vc6-stlport\libboost_regex-vc6-mt-gdp-1_47 + +libboost_regex-vc6-mt-gdp-1_47_clean : + del vc6-stlport\libboost_regex-vc6-mt-gdp-1_47\*.obj + del vc6-stlport\libboost_regex-vc6-mt-gdp-1_47\*.idb + del vc6-stlport\libboost_regex-vc6-mt-gdp-1_47\*.exp + del vc6-stlport\libboost_regex-vc6-mt-gdp-1_47\*.pch + +./vc6-stlport/libboost_regex-vc6-mt-gdp-1_47.lib : vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/c_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/cpp_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/cregex.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/fileiter.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/icu.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/instances.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/posix_api.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_debug.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_raw_buffer.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_traits_defaults.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/static_mutex.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/usinstances.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/w32_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/wc_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/wide_posix_api.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/winstances.obj + link -lib /nologo /out:vc6-stlport/libboost_regex-vc6-mt-gdp-1_47.lib $(XSFLAGS) vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/c_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/cpp_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/cregex.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/fileiter.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/icu.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/instances.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/posix_api.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_debug.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_raw_buffer.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/regex_traits_defaults.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/static_mutex.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/usinstances.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/w32_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/wc_regex_traits.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/wide_posix_api.obj vc6-stlport/libboost_regex-vc6-mt-gdp-1_47/winstances.obj + diff --git a/libs/regex/build/vc6.mak b/libs/regex/build/vc6.mak new file mode 100644 index 0000000000..a8eb5382be --- /dev/null +++ b/libs/regex/build/vc6.mak @@ -0,0 +1,632 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for MSVC compiler +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# path to ICU library installation goes here: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" + +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc6-s-1_47_dir ./vc6/libboost_regex-vc6-s-1_47.lib libboost_regex-vc6-mt-s-1_47_dir ./vc6/libboost_regex-vc6-mt-s-1_47.lib libboost_regex-vc6-sgd-1_47_dir ./vc6/libboost_regex-vc6-sgd-1_47.lib libboost_regex-vc6-mt-sgd-1_47_dir ./vc6/libboost_regex-vc6-mt-sgd-1_47.lib boost_regex-vc6-mt-gd-1_47_dir ./vc6/boost_regex-vc6-mt-gd-1_47.lib boost_regex-vc6-mt-1_47_dir ./vc6/boost_regex-vc6-mt-1_47.lib libboost_regex-vc6-mt-1_47_dir ./vc6/libboost_regex-vc6-mt-1_47.lib libboost_regex-vc6-mt-gd-1_47_dir ./vc6/libboost_regex-vc6-mt-gd-1_47.lib + +clean : libboost_regex-vc6-s-1_47_clean libboost_regex-vc6-mt-s-1_47_clean libboost_regex-vc6-sgd-1_47_clean libboost_regex-vc6-mt-sgd-1_47_clean boost_regex-vc6-mt-gd-1_47_clean boost_regex-vc6-mt-1_47_clean libboost_regex-vc6-mt-1_47_clean libboost_regex-vc6-mt-gd-1_47_clean + +install : all + copy vc6\libboost_regex-vc6-s-1_47.lib "$(MSVCDIR)\lib" + copy vc6\libboost_regex-vc6-mt-s-1_47.lib "$(MSVCDIR)\lib" + copy vc6\libboost_regex-vc6-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc6\libboost_regex-vc6-sgd-1_47.pdb "$(MSVCDIR)\lib" + copy vc6\libboost_regex-vc6-mt-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc6\libboost_regex-vc6-mt-sgd-1_47.pdb "$(MSVCDIR)\lib" + copy vc6\boost_regex-vc6-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc6\boost_regex-vc6-mt-gd-1_47.dll "$(MSVCDIR)\bin" + copy vc6\boost_regex-vc6-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + copy vc6\boost_regex-vc6-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc6\boost_regex-vc6-mt-1_47.dll "$(MSVCDIR)\bin" + copy vc6\libboost_regex-vc6-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc6\libboost_regex-vc6-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc6\libboost_regex-vc6-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc6\$(NULL)" mkdir vc6 + + +######################################################## +# +# section for libboost_regex-vc6-s-1_47.lib +# +######################################################## +vc6/libboost_regex-vc6-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/c_regex_traits.cpp + +vc6/libboost_regex-vc6-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6/libboost_regex-vc6-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/cregex.cpp + +vc6/libboost_regex-vc6-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/fileiter.cpp + +vc6/libboost_regex-vc6-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/icu.cpp + +vc6/libboost_regex-vc6-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/instances.cpp + +vc6/libboost_regex-vc6-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/posix_api.cpp + +vc6/libboost_regex-vc6-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/regex.cpp + +vc6/libboost_regex-vc6-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/regex_debug.cpp + +vc6/libboost_regex-vc6-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6/libboost_regex-vc6-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6/libboost_regex-vc6-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/static_mutex.cpp + +vc6/libboost_regex-vc6-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/usinstances.cpp + +vc6/libboost_regex-vc6-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc6/libboost_regex-vc6-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc6/libboost_regex-vc6-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/wide_posix_api.cpp + +vc6/libboost_regex-vc6-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-s-1_47/ -Fdvc6/libboost_regex-vc6-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-s-1_47_dir : + @if not exist "vc6\libboost_regex-vc6-s-1_47\$(NULL)" mkdir vc6\libboost_regex-vc6-s-1_47 + +libboost_regex-vc6-s-1_47_clean : + del vc6\libboost_regex-vc6-s-1_47\*.obj + del vc6\libboost_regex-vc6-s-1_47\*.idb + del vc6\libboost_regex-vc6-s-1_47\*.exp + del vc6\libboost_regex-vc6-s-1_47\*.pch + +./vc6/libboost_regex-vc6-s-1_47.lib : vc6/libboost_regex-vc6-s-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-s-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-s-1_47/cregex.obj vc6/libboost_regex-vc6-s-1_47/fileiter.obj vc6/libboost_regex-vc6-s-1_47/icu.obj vc6/libboost_regex-vc6-s-1_47/instances.obj vc6/libboost_regex-vc6-s-1_47/posix_api.obj vc6/libboost_regex-vc6-s-1_47/regex.obj vc6/libboost_regex-vc6-s-1_47/regex_debug.obj vc6/libboost_regex-vc6-s-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-s-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-s-1_47/static_mutex.obj vc6/libboost_regex-vc6-s-1_47/usinstances.obj vc6/libboost_regex-vc6-s-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-s-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-s-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-s-1_47/winstances.obj + link -lib /nologo /out:vc6/libboost_regex-vc6-s-1_47.lib $(XSFLAGS) vc6/libboost_regex-vc6-s-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-s-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-s-1_47/cregex.obj vc6/libboost_regex-vc6-s-1_47/fileiter.obj vc6/libboost_regex-vc6-s-1_47/icu.obj vc6/libboost_regex-vc6-s-1_47/instances.obj vc6/libboost_regex-vc6-s-1_47/posix_api.obj vc6/libboost_regex-vc6-s-1_47/regex.obj vc6/libboost_regex-vc6-s-1_47/regex_debug.obj vc6/libboost_regex-vc6-s-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-s-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-s-1_47/static_mutex.obj vc6/libboost_regex-vc6-s-1_47/usinstances.obj vc6/libboost_regex-vc6-s-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-s-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-s-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc6-mt-s-1_47.lib +# +######################################################## +vc6/libboost_regex-vc6-mt-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/c_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/cregex.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/fileiter.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/icu.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/instances.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/posix_api.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/regex.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/regex_debug.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/static_mutex.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/usinstances.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/wide_posix_api.cpp + +vc6/libboost_regex-vc6-mt-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-s-1_47/ -Fdvc6/libboost_regex-vc6-mt-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-mt-s-1_47_dir : + @if not exist "vc6\libboost_regex-vc6-mt-s-1_47\$(NULL)" mkdir vc6\libboost_regex-vc6-mt-s-1_47 + +libboost_regex-vc6-mt-s-1_47_clean : + del vc6\libboost_regex-vc6-mt-s-1_47\*.obj + del vc6\libboost_regex-vc6-mt-s-1_47\*.idb + del vc6\libboost_regex-vc6-mt-s-1_47\*.exp + del vc6\libboost_regex-vc6-mt-s-1_47\*.pch + +./vc6/libboost_regex-vc6-mt-s-1_47.lib : vc6/libboost_regex-vc6-mt-s-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-mt-s-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-mt-s-1_47/cregex.obj vc6/libboost_regex-vc6-mt-s-1_47/fileiter.obj vc6/libboost_regex-vc6-mt-s-1_47/icu.obj vc6/libboost_regex-vc6-mt-s-1_47/instances.obj vc6/libboost_regex-vc6-mt-s-1_47/posix_api.obj vc6/libboost_regex-vc6-mt-s-1_47/regex.obj vc6/libboost_regex-vc6-mt-s-1_47/regex_debug.obj vc6/libboost_regex-vc6-mt-s-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-mt-s-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-mt-s-1_47/static_mutex.obj vc6/libboost_regex-vc6-mt-s-1_47/usinstances.obj vc6/libboost_regex-vc6-mt-s-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-mt-s-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-mt-s-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-mt-s-1_47/winstances.obj + link -lib /nologo /out:vc6/libboost_regex-vc6-mt-s-1_47.lib $(XSFLAGS) vc6/libboost_regex-vc6-mt-s-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-mt-s-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-mt-s-1_47/cregex.obj vc6/libboost_regex-vc6-mt-s-1_47/fileiter.obj vc6/libboost_regex-vc6-mt-s-1_47/icu.obj vc6/libboost_regex-vc6-mt-s-1_47/instances.obj vc6/libboost_regex-vc6-mt-s-1_47/posix_api.obj vc6/libboost_regex-vc6-mt-s-1_47/regex.obj vc6/libboost_regex-vc6-mt-s-1_47/regex_debug.obj vc6/libboost_regex-vc6-mt-s-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-mt-s-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-mt-s-1_47/static_mutex.obj vc6/libboost_regex-vc6-mt-s-1_47/usinstances.obj vc6/libboost_regex-vc6-mt-s-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-mt-s-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-mt-s-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-mt-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc6-sgd-1_47.lib +# +######################################################## +vc6/libboost_regex-vc6-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc6/libboost_regex-vc6-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6/libboost_regex-vc6-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/cregex.cpp + +vc6/libboost_regex-vc6-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/fileiter.cpp + +vc6/libboost_regex-vc6-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/icu.cpp + +vc6/libboost_regex-vc6-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/instances.cpp + +vc6/libboost_regex-vc6-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/posix_api.cpp + +vc6/libboost_regex-vc6-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/regex.cpp + +vc6/libboost_regex-vc6-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/regex_debug.cpp + +vc6/libboost_regex-vc6-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6/libboost_regex-vc6-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6/libboost_regex-vc6-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/static_mutex.cpp + +vc6/libboost_regex-vc6-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/usinstances.cpp + +vc6/libboost_regex-vc6-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc6/libboost_regex-vc6-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc6/libboost_regex-vc6-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc6/libboost_regex-vc6-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-sgd-1_47/ -Fdvc6/libboost_regex-vc6-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-sgd-1_47_dir : + @if not exist "vc6\libboost_regex-vc6-sgd-1_47\$(NULL)" mkdir vc6\libboost_regex-vc6-sgd-1_47 + +libboost_regex-vc6-sgd-1_47_clean : + del vc6\libboost_regex-vc6-sgd-1_47\*.obj + del vc6\libboost_regex-vc6-sgd-1_47\*.idb + del vc6\libboost_regex-vc6-sgd-1_47\*.exp + del vc6\libboost_regex-vc6-sgd-1_47\*.pch + +./vc6/libboost_regex-vc6-sgd-1_47.lib : vc6/libboost_regex-vc6-sgd-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-sgd-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-sgd-1_47/cregex.obj vc6/libboost_regex-vc6-sgd-1_47/fileiter.obj vc6/libboost_regex-vc6-sgd-1_47/icu.obj vc6/libboost_regex-vc6-sgd-1_47/instances.obj vc6/libboost_regex-vc6-sgd-1_47/posix_api.obj vc6/libboost_regex-vc6-sgd-1_47/regex.obj vc6/libboost_regex-vc6-sgd-1_47/regex_debug.obj vc6/libboost_regex-vc6-sgd-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-sgd-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-sgd-1_47/static_mutex.obj vc6/libboost_regex-vc6-sgd-1_47/usinstances.obj vc6/libboost_regex-vc6-sgd-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-sgd-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-sgd-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-sgd-1_47/winstances.obj + link -lib /nologo /out:vc6/libboost_regex-vc6-sgd-1_47.lib $(XSFLAGS) vc6/libboost_regex-vc6-sgd-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-sgd-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-sgd-1_47/cregex.obj vc6/libboost_regex-vc6-sgd-1_47/fileiter.obj vc6/libboost_regex-vc6-sgd-1_47/icu.obj vc6/libboost_regex-vc6-sgd-1_47/instances.obj vc6/libboost_regex-vc6-sgd-1_47/posix_api.obj vc6/libboost_regex-vc6-sgd-1_47/regex.obj vc6/libboost_regex-vc6-sgd-1_47/regex_debug.obj vc6/libboost_regex-vc6-sgd-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-sgd-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-sgd-1_47/static_mutex.obj vc6/libboost_regex-vc6-sgd-1_47/usinstances.obj vc6/libboost_regex-vc6-sgd-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-sgd-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-sgd-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-sgd-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc6-mt-sgd-1_47.lib +# +######################################################## +vc6/libboost_regex-vc6-mt-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/cregex.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/fileiter.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/icu.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/instances.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/posix_api.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/regex.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/regex_debug.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/static_mutex.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/usinstances.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc6/libboost_regex-vc6-mt-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-sgd-1_47/ -Fdvc6/libboost_regex-vc6-mt-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-mt-sgd-1_47_dir : + @if not exist "vc6\libboost_regex-vc6-mt-sgd-1_47\$(NULL)" mkdir vc6\libboost_regex-vc6-mt-sgd-1_47 + +libboost_regex-vc6-mt-sgd-1_47_clean : + del vc6\libboost_regex-vc6-mt-sgd-1_47\*.obj + del vc6\libboost_regex-vc6-mt-sgd-1_47\*.idb + del vc6\libboost_regex-vc6-mt-sgd-1_47\*.exp + del vc6\libboost_regex-vc6-mt-sgd-1_47\*.pch + +./vc6/libboost_regex-vc6-mt-sgd-1_47.lib : vc6/libboost_regex-vc6-mt-sgd-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-mt-sgd-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-mt-sgd-1_47/cregex.obj vc6/libboost_regex-vc6-mt-sgd-1_47/fileiter.obj vc6/libboost_regex-vc6-mt-sgd-1_47/icu.obj vc6/libboost_regex-vc6-mt-sgd-1_47/instances.obj vc6/libboost_regex-vc6-mt-sgd-1_47/posix_api.obj vc6/libboost_regex-vc6-mt-sgd-1_47/regex.obj vc6/libboost_regex-vc6-mt-sgd-1_47/regex_debug.obj vc6/libboost_regex-vc6-mt-sgd-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-mt-sgd-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-mt-sgd-1_47/static_mutex.obj vc6/libboost_regex-vc6-mt-sgd-1_47/usinstances.obj vc6/libboost_regex-vc6-mt-sgd-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-mt-sgd-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-mt-sgd-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-mt-sgd-1_47/winstances.obj + link -lib /nologo /out:vc6/libboost_regex-vc6-mt-sgd-1_47.lib $(XSFLAGS) vc6/libboost_regex-vc6-mt-sgd-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-mt-sgd-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-mt-sgd-1_47/cregex.obj vc6/libboost_regex-vc6-mt-sgd-1_47/fileiter.obj vc6/libboost_regex-vc6-mt-sgd-1_47/icu.obj vc6/libboost_regex-vc6-mt-sgd-1_47/instances.obj vc6/libboost_regex-vc6-mt-sgd-1_47/posix_api.obj vc6/libboost_regex-vc6-mt-sgd-1_47/regex.obj vc6/libboost_regex-vc6-mt-sgd-1_47/regex_debug.obj vc6/libboost_regex-vc6-mt-sgd-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-mt-sgd-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-mt-sgd-1_47/static_mutex.obj vc6/libboost_regex-vc6-mt-sgd-1_47/usinstances.obj vc6/libboost_regex-vc6-mt-sgd-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-mt-sgd-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-mt-sgd-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-mt-sgd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc6-mt-gd-1_47.lib +# +######################################################## +vc6/boost_regex-vc6-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/cregex.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/icu.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/instances.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/regex.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc6/boost_regex-vc6-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-gd-1_47/ -Fdvc6/boost_regex-vc6-mt-gd-1_47.pdb ../src/winstances.cpp + +boost_regex-vc6-mt-gd-1_47_dir : + @if not exist "vc6\boost_regex-vc6-mt-gd-1_47\$(NULL)" mkdir vc6\boost_regex-vc6-mt-gd-1_47 + +boost_regex-vc6-mt-gd-1_47_clean : + del vc6\boost_regex-vc6-mt-gd-1_47\*.obj + del vc6\boost_regex-vc6-mt-gd-1_47\*.idb + del vc6\boost_regex-vc6-mt-gd-1_47\*.exp + del vc6\boost_regex-vc6-mt-gd-1_47\*.pch + +./vc6/boost_regex-vc6-mt-gd-1_47.lib : vc6/boost_regex-vc6-mt-gd-1_47/c_regex_traits.obj vc6/boost_regex-vc6-mt-gd-1_47/cpp_regex_traits.obj vc6/boost_regex-vc6-mt-gd-1_47/cregex.obj vc6/boost_regex-vc6-mt-gd-1_47/fileiter.obj vc6/boost_regex-vc6-mt-gd-1_47/icu.obj vc6/boost_regex-vc6-mt-gd-1_47/instances.obj vc6/boost_regex-vc6-mt-gd-1_47/posix_api.obj vc6/boost_regex-vc6-mt-gd-1_47/regex.obj vc6/boost_regex-vc6-mt-gd-1_47/regex_debug.obj vc6/boost_regex-vc6-mt-gd-1_47/regex_raw_buffer.obj vc6/boost_regex-vc6-mt-gd-1_47/regex_traits_defaults.obj vc6/boost_regex-vc6-mt-gd-1_47/static_mutex.obj vc6/boost_regex-vc6-mt-gd-1_47/usinstances.obj vc6/boost_regex-vc6-mt-gd-1_47/w32_regex_traits.obj vc6/boost_regex-vc6-mt-gd-1_47/wc_regex_traits.obj vc6/boost_regex-vc6-mt-gd-1_47/wide_posix_api.obj vc6/boost_regex-vc6-mt-gd-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc6/boost_regex-vc6-mt-gd-1_47.pdb" /debug /machine:I386 /out:"vc6/boost_regex-vc6-mt-gd-1_47.dll" /implib:"vc6/boost_regex-vc6-mt-gd-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc6/boost_regex-vc6-mt-gd-1_47/c_regex_traits.obj vc6/boost_regex-vc6-mt-gd-1_47/cpp_regex_traits.obj vc6/boost_regex-vc6-mt-gd-1_47/cregex.obj vc6/boost_regex-vc6-mt-gd-1_47/fileiter.obj vc6/boost_regex-vc6-mt-gd-1_47/icu.obj vc6/boost_regex-vc6-mt-gd-1_47/instances.obj vc6/boost_regex-vc6-mt-gd-1_47/posix_api.obj vc6/boost_regex-vc6-mt-gd-1_47/regex.obj vc6/boost_regex-vc6-mt-gd-1_47/regex_debug.obj vc6/boost_regex-vc6-mt-gd-1_47/regex_raw_buffer.obj vc6/boost_regex-vc6-mt-gd-1_47/regex_traits_defaults.obj vc6/boost_regex-vc6-mt-gd-1_47/static_mutex.obj vc6/boost_regex-vc6-mt-gd-1_47/usinstances.obj vc6/boost_regex-vc6-mt-gd-1_47/w32_regex_traits.obj vc6/boost_regex-vc6-mt-gd-1_47/wc_regex_traits.obj vc6/boost_regex-vc6-mt-gd-1_47/wide_posix_api.obj vc6/boost_regex-vc6-mt-gd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc6-mt-1_47.lib +# +######################################################## +vc6/boost_regex-vc6-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc6/boost_regex-vc6-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6/boost_regex-vc6-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/cregex.cpp + +vc6/boost_regex-vc6-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/fileiter.cpp + +vc6/boost_regex-vc6-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/icu.cpp + +vc6/boost_regex-vc6-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/instances.cpp + +vc6/boost_regex-vc6-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/posix_api.cpp + +vc6/boost_regex-vc6-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/regex.cpp + +vc6/boost_regex-vc6-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/regex_debug.cpp + +vc6/boost_regex-vc6-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6/boost_regex-vc6-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6/boost_regex-vc6-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/static_mutex.cpp + +vc6/boost_regex-vc6-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/usinstances.cpp + +vc6/boost_regex-vc6-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc6/boost_regex-vc6-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc6/boost_regex-vc6-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc6/boost_regex-vc6-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/boost_regex-vc6-mt-1_47/ -Fdvc6/boost_regex-vc6-mt-1_47.pdb ../src/winstances.cpp + +boost_regex-vc6-mt-1_47_dir : + @if not exist "vc6\boost_regex-vc6-mt-1_47\$(NULL)" mkdir vc6\boost_regex-vc6-mt-1_47 + +boost_regex-vc6-mt-1_47_clean : + del vc6\boost_regex-vc6-mt-1_47\*.obj + del vc6\boost_regex-vc6-mt-1_47\*.idb + del vc6\boost_regex-vc6-mt-1_47\*.exp + del vc6\boost_regex-vc6-mt-1_47\*.pch + +./vc6/boost_regex-vc6-mt-1_47.lib : vc6/boost_regex-vc6-mt-1_47/c_regex_traits.obj vc6/boost_regex-vc6-mt-1_47/cpp_regex_traits.obj vc6/boost_regex-vc6-mt-1_47/cregex.obj vc6/boost_regex-vc6-mt-1_47/fileiter.obj vc6/boost_regex-vc6-mt-1_47/icu.obj vc6/boost_regex-vc6-mt-1_47/instances.obj vc6/boost_regex-vc6-mt-1_47/posix_api.obj vc6/boost_regex-vc6-mt-1_47/regex.obj vc6/boost_regex-vc6-mt-1_47/regex_debug.obj vc6/boost_regex-vc6-mt-1_47/regex_raw_buffer.obj vc6/boost_regex-vc6-mt-1_47/regex_traits_defaults.obj vc6/boost_regex-vc6-mt-1_47/static_mutex.obj vc6/boost_regex-vc6-mt-1_47/usinstances.obj vc6/boost_regex-vc6-mt-1_47/w32_regex_traits.obj vc6/boost_regex-vc6-mt-1_47/wc_regex_traits.obj vc6/boost_regex-vc6-mt-1_47/wide_posix_api.obj vc6/boost_regex-vc6-mt-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc6/boost_regex-vc6-mt-1_47.pdb" /debug /machine:I386 /out:"vc6/boost_regex-vc6-mt-1_47.dll" /implib:"vc6/boost_regex-vc6-mt-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc6/boost_regex-vc6-mt-1_47/c_regex_traits.obj vc6/boost_regex-vc6-mt-1_47/cpp_regex_traits.obj vc6/boost_regex-vc6-mt-1_47/cregex.obj vc6/boost_regex-vc6-mt-1_47/fileiter.obj vc6/boost_regex-vc6-mt-1_47/icu.obj vc6/boost_regex-vc6-mt-1_47/instances.obj vc6/boost_regex-vc6-mt-1_47/posix_api.obj vc6/boost_regex-vc6-mt-1_47/regex.obj vc6/boost_regex-vc6-mt-1_47/regex_debug.obj vc6/boost_regex-vc6-mt-1_47/regex_raw_buffer.obj vc6/boost_regex-vc6-mt-1_47/regex_traits_defaults.obj vc6/boost_regex-vc6-mt-1_47/static_mutex.obj vc6/boost_regex-vc6-mt-1_47/usinstances.obj vc6/boost_regex-vc6-mt-1_47/w32_regex_traits.obj vc6/boost_regex-vc6-mt-1_47/wc_regex_traits.obj vc6/boost_regex-vc6-mt-1_47/wide_posix_api.obj vc6/boost_regex-vc6-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc6-mt-1_47.lib +# +######################################################## +vc6/libboost_regex-vc6-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/cregex.cpp + +vc6/libboost_regex-vc6-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/fileiter.cpp + +vc6/libboost_regex-vc6-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/icu.cpp + +vc6/libboost_regex-vc6-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/instances.cpp + +vc6/libboost_regex-vc6-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/posix_api.cpp + +vc6/libboost_regex-vc6-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/regex.cpp + +vc6/libboost_regex-vc6-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/regex_debug.cpp + +vc6/libboost_regex-vc6-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6/libboost_regex-vc6-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6/libboost_regex-vc6-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/static_mutex.cpp + +vc6/libboost_regex-vc6-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/usinstances.cpp + +vc6/libboost_regex-vc6-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc6/libboost_regex-vc6-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-1_47/ -Fdvc6/libboost_regex-vc6-mt-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-mt-1_47_dir : + @if not exist "vc6\libboost_regex-vc6-mt-1_47\$(NULL)" mkdir vc6\libboost_regex-vc6-mt-1_47 + +libboost_regex-vc6-mt-1_47_clean : + del vc6\libboost_regex-vc6-mt-1_47\*.obj + del vc6\libboost_regex-vc6-mt-1_47\*.idb + del vc6\libboost_regex-vc6-mt-1_47\*.exp + del vc6\libboost_regex-vc6-mt-1_47\*.pch + +./vc6/libboost_regex-vc6-mt-1_47.lib : vc6/libboost_regex-vc6-mt-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-mt-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-mt-1_47/cregex.obj vc6/libboost_regex-vc6-mt-1_47/fileiter.obj vc6/libboost_regex-vc6-mt-1_47/icu.obj vc6/libboost_regex-vc6-mt-1_47/instances.obj vc6/libboost_regex-vc6-mt-1_47/posix_api.obj vc6/libboost_regex-vc6-mt-1_47/regex.obj vc6/libboost_regex-vc6-mt-1_47/regex_debug.obj vc6/libboost_regex-vc6-mt-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-mt-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-mt-1_47/static_mutex.obj vc6/libboost_regex-vc6-mt-1_47/usinstances.obj vc6/libboost_regex-vc6-mt-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-mt-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-mt-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-mt-1_47/winstances.obj + link -lib /nologo /out:vc6/libboost_regex-vc6-mt-1_47.lib $(XSFLAGS) vc6/libboost_regex-vc6-mt-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-mt-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-mt-1_47/cregex.obj vc6/libboost_regex-vc6-mt-1_47/fileiter.obj vc6/libboost_regex-vc6-mt-1_47/icu.obj vc6/libboost_regex-vc6-mt-1_47/instances.obj vc6/libboost_regex-vc6-mt-1_47/posix_api.obj vc6/libboost_regex-vc6-mt-1_47/regex.obj vc6/libboost_regex-vc6-mt-1_47/regex_debug.obj vc6/libboost_regex-vc6-mt-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-mt-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-mt-1_47/static_mutex.obj vc6/libboost_regex-vc6-mt-1_47/usinstances.obj vc6/libboost_regex-vc6-mt-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-mt-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-mt-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc6-mt-gd-1_47.lib +# +######################################################## +vc6/libboost_regex-vc6-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/cregex.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/icu.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/instances.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/regex.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc6/libboost_regex-vc6-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc6/libboost_regex-vc6-mt-gd-1_47/ -Fdvc6/libboost_regex-vc6-mt-gd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc6-mt-gd-1_47_dir : + @if not exist "vc6\libboost_regex-vc6-mt-gd-1_47\$(NULL)" mkdir vc6\libboost_regex-vc6-mt-gd-1_47 + +libboost_regex-vc6-mt-gd-1_47_clean : + del vc6\libboost_regex-vc6-mt-gd-1_47\*.obj + del vc6\libboost_regex-vc6-mt-gd-1_47\*.idb + del vc6\libboost_regex-vc6-mt-gd-1_47\*.exp + del vc6\libboost_regex-vc6-mt-gd-1_47\*.pch + +./vc6/libboost_regex-vc6-mt-gd-1_47.lib : vc6/libboost_regex-vc6-mt-gd-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-mt-gd-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-mt-gd-1_47/cregex.obj vc6/libboost_regex-vc6-mt-gd-1_47/fileiter.obj vc6/libboost_regex-vc6-mt-gd-1_47/icu.obj vc6/libboost_regex-vc6-mt-gd-1_47/instances.obj vc6/libboost_regex-vc6-mt-gd-1_47/posix_api.obj vc6/libboost_regex-vc6-mt-gd-1_47/regex.obj vc6/libboost_regex-vc6-mt-gd-1_47/regex_debug.obj vc6/libboost_regex-vc6-mt-gd-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-mt-gd-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-mt-gd-1_47/static_mutex.obj vc6/libboost_regex-vc6-mt-gd-1_47/usinstances.obj vc6/libboost_regex-vc6-mt-gd-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-mt-gd-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-mt-gd-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-mt-gd-1_47/winstances.obj + link -lib /nologo /out:vc6/libboost_regex-vc6-mt-gd-1_47.lib $(XSFLAGS) vc6/libboost_regex-vc6-mt-gd-1_47/c_regex_traits.obj vc6/libboost_regex-vc6-mt-gd-1_47/cpp_regex_traits.obj vc6/libboost_regex-vc6-mt-gd-1_47/cregex.obj vc6/libboost_regex-vc6-mt-gd-1_47/fileiter.obj vc6/libboost_regex-vc6-mt-gd-1_47/icu.obj vc6/libboost_regex-vc6-mt-gd-1_47/instances.obj vc6/libboost_regex-vc6-mt-gd-1_47/posix_api.obj vc6/libboost_regex-vc6-mt-gd-1_47/regex.obj vc6/libboost_regex-vc6-mt-gd-1_47/regex_debug.obj vc6/libboost_regex-vc6-mt-gd-1_47/regex_raw_buffer.obj vc6/libboost_regex-vc6-mt-gd-1_47/regex_traits_defaults.obj vc6/libboost_regex-vc6-mt-gd-1_47/static_mutex.obj vc6/libboost_regex-vc6-mt-gd-1_47/usinstances.obj vc6/libboost_regex-vc6-mt-gd-1_47/w32_regex_traits.obj vc6/libboost_regex-vc6-mt-gd-1_47/wc_regex_traits.obj vc6/libboost_regex-vc6-mt-gd-1_47/wide_posix_api.obj vc6/libboost_regex-vc6-mt-gd-1_47/winstances.obj + diff --git a/libs/regex/build/vc7-stlport.mak b/libs/regex/build/vc7-stlport.mak new file mode 100644 index 0000000000..9d7b467169 --- /dev/null +++ b/libs/regex/build/vc7-stlport.mak @@ -0,0 +1,496 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for VC6+STLPort +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# ICU setup: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(STLPORT_PATH)" == "" +!ERROR Variable STLPORT_PATH not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc7-mt-sp-1_47_dir ./vc7-stlport/libboost_regex-vc7-mt-sp-1_47.lib boost_regex-vc7-mt-p-1_47_dir ./vc7-stlport/boost_regex-vc7-mt-p-1_47.lib libboost_regex-vc7-mt-p-1_47_dir ./vc7-stlport/libboost_regex-vc7-mt-p-1_47.lib boost_regex-vc7-mt-gdp-1_47_dir ./vc7-stlport/boost_regex-vc7-mt-gdp-1_47.lib libboost_regex-vc7-mt-sgdp-1_47_dir ./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.lib libboost_regex-vc7-mt-gdp-1_47_dir ./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47.lib + +clean : libboost_regex-vc7-mt-sp-1_47_clean boost_regex-vc7-mt-p-1_47_clean libboost_regex-vc7-mt-p-1_47_clean boost_regex-vc7-mt-gdp-1_47_clean libboost_regex-vc7-mt-sgdp-1_47_clean libboost_regex-vc7-mt-gdp-1_47_clean + +install : stlport_check all + copy vc7-stlport\libboost_regex-vc7-mt-sp-1_47.lib "$(MSVCDIR)\lib" + copy vc7-stlport\boost_regex-vc7-mt-p-1_47.lib "$(MSVCDIR)\lib" + copy vc7-stlport\boost_regex-vc7-mt-p-1_47.dll "$(MSVCDIR)\bin" + copy vc7-stlport\libboost_regex-vc7-mt-p-1_47.lib "$(MSVCDIR)\lib" + copy vc7-stlport\boost_regex-vc7-mt-gdp-1_47.lib "$(MSVCDIR)\lib" + copy vc7-stlport\boost_regex-vc7-mt-gdp-1_47.dll "$(MSVCDIR)\bin" + copy vc7-stlport\boost_regex-vc7-mt-gdp-1_47.pdb "$(MSVCDIR)\lib" + copy vc7-stlport\libboost_regex-vc7-mt-sgdp-1_47.lib "$(MSVCDIR)\lib" + copy vc7-stlport\libboost_regex-vc7-mt-sgdp-1_47.pdb "$(MSVCDIR)\lib" + copy vc7-stlport\libboost_regex-vc7-mt-gdp-1_47.lib "$(MSVCDIR)\lib" + copy vc7-stlport\libboost_regex-vc7-mt-gdp-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc7-stlport\$(NULL)" mkdir vc7-stlport + +stlport_check : "$(STLPORT_PATH)\stlport\string" + echo + + +######################################################## +# +# section for libboost_regex-vc7-mt-sp-1_47.lib +# +######################################################## +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/c_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/cregex.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/fileiter.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/icu.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/instances.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/posix_api.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/regex.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/regex_debug.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/static_mutex.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/usinstances.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/w32_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/wc_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/wide_posix_api.cpp + +vc7-stlport/libboost_regex-vc7-mt-sp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-mt-sp-1_47_dir : + @if not exist "vc7-stlport\libboost_regex-vc7-mt-sp-1_47\$(NULL)" mkdir vc7-stlport\libboost_regex-vc7-mt-sp-1_47 + +libboost_regex-vc7-mt-sp-1_47_clean : + del vc7-stlport\libboost_regex-vc7-mt-sp-1_47\*.obj + del vc7-stlport\libboost_regex-vc7-mt-sp-1_47\*.idb + del vc7-stlport\libboost_regex-vc7-mt-sp-1_47\*.exp + del vc7-stlport\libboost_regex-vc7-mt-sp-1_47\*.pch + +./vc7-stlport/libboost_regex-vc7-mt-sp-1_47.lib : vc7-stlport/libboost_regex-vc7-mt-sp-1_47/c_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/cpp_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/cregex.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/fileiter.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/icu.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/instances.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/posix_api.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_debug.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_raw_buffer.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_traits_defaults.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/static_mutex.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/usinstances.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/w32_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/wc_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/wide_posix_api.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/winstances.obj + link -lib /nologo /out:vc7-stlport/libboost_regex-vc7-mt-sp-1_47.lib $(XSFLAGS) vc7-stlport/libboost_regex-vc7-mt-sp-1_47/c_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/cpp_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/cregex.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/fileiter.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/icu.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/instances.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/posix_api.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_debug.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_raw_buffer.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/regex_traits_defaults.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/static_mutex.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/usinstances.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/w32_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/wc_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/wide_posix_api.obj vc7-stlport/libboost_regex-vc7-mt-sp-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc7-mt-p-1_47.lib +# +######################################################## +vc7-stlport/boost_regex-vc7-mt-p-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/c_regex_traits.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/cregex.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/fileiter.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/icu.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/instances.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/posix_api.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/regex.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/regex_debug.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/static_mutex.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/usinstances.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/w32_regex_traits.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/wc_regex_traits.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/wide_posix_api.cpp + +vc7-stlport/boost_regex-vc7-mt-p-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-p-1_47.pdb ../src/winstances.cpp + +boost_regex-vc7-mt-p-1_47_dir : + @if not exist "vc7-stlport\boost_regex-vc7-mt-p-1_47\$(NULL)" mkdir vc7-stlport\boost_regex-vc7-mt-p-1_47 + +boost_regex-vc7-mt-p-1_47_clean : + del vc7-stlport\boost_regex-vc7-mt-p-1_47\*.obj + del vc7-stlport\boost_regex-vc7-mt-p-1_47\*.idb + del vc7-stlport\boost_regex-vc7-mt-p-1_47\*.exp + del vc7-stlport\boost_regex-vc7-mt-p-1_47\*.pch + +./vc7-stlport/boost_regex-vc7-mt-p-1_47.lib : vc7-stlport/boost_regex-vc7-mt-p-1_47/c_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/cpp_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/cregex.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/fileiter.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/icu.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/instances.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/posix_api.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/regex.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_debug.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_raw_buffer.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_traits_defaults.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/static_mutex.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/usinstances.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/w32_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/wc_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/wide_posix_api.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc7-stlport/boost_regex-vc7-mt-p-1_47.pdb" /debug /machine:I386 /out:"vc7-stlport/boost_regex-vc7-mt-p-1_47.dll" /implib:"vc7-stlport/boost_regex-vc7-mt-p-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc7-stlport/boost_regex-vc7-mt-p-1_47/c_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/cpp_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/cregex.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/fileiter.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/icu.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/instances.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/posix_api.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/regex.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_debug.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_raw_buffer.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/regex_traits_defaults.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/static_mutex.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/usinstances.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/w32_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/wc_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/wide_posix_api.obj vc7-stlport/boost_regex-vc7-mt-p-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc7-mt-p-1_47.lib +# +######################################################## +vc7-stlport/libboost_regex-vc7-mt-p-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/c_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/cregex.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/fileiter.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/icu.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/instances.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/posix_api.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/regex.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/regex_debug.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/static_mutex.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/usinstances.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/w32_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/wc_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/wide_posix_api.cpp + +vc7-stlport/libboost_regex-vc7-mt-p-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-p-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-p-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-mt-p-1_47_dir : + @if not exist "vc7-stlport\libboost_regex-vc7-mt-p-1_47\$(NULL)" mkdir vc7-stlport\libboost_regex-vc7-mt-p-1_47 + +libboost_regex-vc7-mt-p-1_47_clean : + del vc7-stlport\libboost_regex-vc7-mt-p-1_47\*.obj + del vc7-stlport\libboost_regex-vc7-mt-p-1_47\*.idb + del vc7-stlport\libboost_regex-vc7-mt-p-1_47\*.exp + del vc7-stlport\libboost_regex-vc7-mt-p-1_47\*.pch + +./vc7-stlport/libboost_regex-vc7-mt-p-1_47.lib : vc7-stlport/libboost_regex-vc7-mt-p-1_47/c_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/cpp_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/cregex.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/fileiter.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/icu.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/instances.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/posix_api.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_debug.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_raw_buffer.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_traits_defaults.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/static_mutex.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/usinstances.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/w32_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/wc_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/wide_posix_api.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/winstances.obj + link -lib /nologo /out:vc7-stlport/libboost_regex-vc7-mt-p-1_47.lib $(XSFLAGS) vc7-stlport/libboost_regex-vc7-mt-p-1_47/c_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/cpp_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/cregex.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/fileiter.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/icu.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/instances.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/posix_api.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_debug.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_raw_buffer.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/regex_traits_defaults.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/static_mutex.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/usinstances.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/w32_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/wc_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/wide_posix_api.obj vc7-stlport/libboost_regex-vc7-mt-p-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc7-mt-gdp-1_47.lib +# +######################################################## +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/c_regex_traits.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/cregex.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/fileiter.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/icu.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/instances.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/posix_api.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/regex.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/regex_debug.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/static_mutex.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/usinstances.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/wide_posix_api.cpp + +vc7-stlport/boost_regex-vc7-mt-gdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/boost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb ../src/winstances.cpp + +boost_regex-vc7-mt-gdp-1_47_dir : + @if not exist "vc7-stlport\boost_regex-vc7-mt-gdp-1_47\$(NULL)" mkdir vc7-stlport\boost_regex-vc7-mt-gdp-1_47 + +boost_regex-vc7-mt-gdp-1_47_clean : + del vc7-stlport\boost_regex-vc7-mt-gdp-1_47\*.obj + del vc7-stlport\boost_regex-vc7-mt-gdp-1_47\*.idb + del vc7-stlport\boost_regex-vc7-mt-gdp-1_47\*.exp + del vc7-stlport\boost_regex-vc7-mt-gdp-1_47\*.pch + +./vc7-stlport/boost_regex-vc7-mt-gdp-1_47.lib : vc7-stlport/boost_regex-vc7-mt-gdp-1_47/c_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/cpp_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/cregex.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/fileiter.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/icu.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/instances.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/posix_api.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_debug.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_raw_buffer.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_traits_defaults.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/static_mutex.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/usinstances.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/w32_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/wc_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/wide_posix_api.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc7-stlport/boost_regex-vc7-mt-gdp-1_47.pdb" /debug /machine:I386 /out:"vc7-stlport/boost_regex-vc7-mt-gdp-1_47.dll" /implib:"vc7-stlport/boost_regex-vc7-mt-gdp-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc7-stlport/boost_regex-vc7-mt-gdp-1_47/c_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/cpp_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/cregex.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/fileiter.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/icu.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/instances.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/posix_api.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_debug.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_raw_buffer.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/regex_traits_defaults.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/static_mutex.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/usinstances.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/w32_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/wc_regex_traits.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/wide_posix_api.obj vc7-stlport/boost_regex-vc7-mt-gdp-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc7-mt-sgdp-1_47.lib +# +######################################################## +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/c_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/cregex.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/fileiter.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/icu.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/instances.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/posix_api.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/regex.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/regex_debug.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/static_mutex.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/usinstances.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/wide_posix_api.cpp + +vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-mt-sgdp-1_47_dir : + @if not exist "vc7-stlport\libboost_regex-vc7-mt-sgdp-1_47\$(NULL)" mkdir vc7-stlport\libboost_regex-vc7-mt-sgdp-1_47 + +libboost_regex-vc7-mt-sgdp-1_47_clean : + del vc7-stlport\libboost_regex-vc7-mt-sgdp-1_47\*.obj + del vc7-stlport\libboost_regex-vc7-mt-sgdp-1_47\*.idb + del vc7-stlport\libboost_regex-vc7-mt-sgdp-1_47\*.exp + del vc7-stlport\libboost_regex-vc7-mt-sgdp-1_47\*.pch + +./vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.lib : vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/c_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/cpp_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/cregex.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/fileiter.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/icu.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/instances.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/posix_api.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_debug.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_raw_buffer.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_traits_defaults.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/static_mutex.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/usinstances.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/w32_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/wc_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/wide_posix_api.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/winstances.obj + link -lib /nologo /out:vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47.lib $(XSFLAGS) vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/c_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/cpp_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/cregex.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/fileiter.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/icu.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/instances.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/posix_api.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_debug.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_raw_buffer.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/regex_traits_defaults.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/static_mutex.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/usinstances.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/w32_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/wc_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/wide_posix_api.obj vc7-stlport/libboost_regex-vc7-mt-sgdp-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc7-mt-gdp-1_47.lib +# +######################################################## +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/c_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/cregex.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/fileiter.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/icu.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/instances.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/posix_api.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/regex.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/regex_debug.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/static_mutex.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/usinstances.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/wide_posix_api.cpp + +vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/ -Fdvc7-stlport/libboost_regex-vc7-mt-gdp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-mt-gdp-1_47_dir : + @if not exist "vc7-stlport\libboost_regex-vc7-mt-gdp-1_47\$(NULL)" mkdir vc7-stlport\libboost_regex-vc7-mt-gdp-1_47 + +libboost_regex-vc7-mt-gdp-1_47_clean : + del vc7-stlport\libboost_regex-vc7-mt-gdp-1_47\*.obj + del vc7-stlport\libboost_regex-vc7-mt-gdp-1_47\*.idb + del vc7-stlport\libboost_regex-vc7-mt-gdp-1_47\*.exp + del vc7-stlport\libboost_regex-vc7-mt-gdp-1_47\*.pch + +./vc7-stlport/libboost_regex-vc7-mt-gdp-1_47.lib : vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/c_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/cpp_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/cregex.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/fileiter.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/icu.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/instances.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/posix_api.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_debug.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_raw_buffer.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_traits_defaults.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/static_mutex.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/usinstances.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/w32_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/wc_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/wide_posix_api.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/winstances.obj + link -lib /nologo /out:vc7-stlport/libboost_regex-vc7-mt-gdp-1_47.lib $(XSFLAGS) vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/c_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/cpp_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/cregex.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/fileiter.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/icu.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/instances.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/posix_api.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_debug.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_raw_buffer.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/regex_traits_defaults.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/static_mutex.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/usinstances.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/w32_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/wc_regex_traits.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/wide_posix_api.obj vc7-stlport/libboost_regex-vc7-mt-gdp-1_47/winstances.obj + diff --git a/libs/regex/build/vc7.mak b/libs/regex/build/vc7.mak new file mode 100644 index 0000000000..c999206946 --- /dev/null +++ b/libs/regex/build/vc7.mak @@ -0,0 +1,632 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for MSVC compiler +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# path to ICU library installation goes here: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" + +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc7-s-1_47_dir ./vc7/libboost_regex-vc7-s-1_47.lib libboost_regex-vc7-mt-s-1_47_dir ./vc7/libboost_regex-vc7-mt-s-1_47.lib libboost_regex-vc7-sgd-1_47_dir ./vc7/libboost_regex-vc7-sgd-1_47.lib libboost_regex-vc7-mt-sgd-1_47_dir ./vc7/libboost_regex-vc7-mt-sgd-1_47.lib boost_regex-vc7-mt-gd-1_47_dir ./vc7/boost_regex-vc7-mt-gd-1_47.lib boost_regex-vc7-mt-1_47_dir ./vc7/boost_regex-vc7-mt-1_47.lib libboost_regex-vc7-mt-1_47_dir ./vc7/libboost_regex-vc7-mt-1_47.lib libboost_regex-vc7-mt-gd-1_47_dir ./vc7/libboost_regex-vc7-mt-gd-1_47.lib + +clean : libboost_regex-vc7-s-1_47_clean libboost_regex-vc7-mt-s-1_47_clean libboost_regex-vc7-sgd-1_47_clean libboost_regex-vc7-mt-sgd-1_47_clean boost_regex-vc7-mt-gd-1_47_clean boost_regex-vc7-mt-1_47_clean libboost_regex-vc7-mt-1_47_clean libboost_regex-vc7-mt-gd-1_47_clean + +install : all + copy vc7\libboost_regex-vc7-s-1_47.lib "$(MSVCDIR)\lib" + copy vc7\libboost_regex-vc7-mt-s-1_47.lib "$(MSVCDIR)\lib" + copy vc7\libboost_regex-vc7-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc7\libboost_regex-vc7-sgd-1_47.pdb "$(MSVCDIR)\lib" + copy vc7\libboost_regex-vc7-mt-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc7\libboost_regex-vc7-mt-sgd-1_47.pdb "$(MSVCDIR)\lib" + copy vc7\boost_regex-vc7-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc7\boost_regex-vc7-mt-gd-1_47.dll "$(MSVCDIR)\bin" + copy vc7\boost_regex-vc7-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + copy vc7\boost_regex-vc7-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc7\boost_regex-vc7-mt-1_47.dll "$(MSVCDIR)\bin" + copy vc7\libboost_regex-vc7-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc7\libboost_regex-vc7-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc7\libboost_regex-vc7-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc7\$(NULL)" mkdir vc7 + + +######################################################## +# +# section for libboost_regex-vc7-s-1_47.lib +# +######################################################## +vc7/libboost_regex-vc7-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/c_regex_traits.cpp + +vc7/libboost_regex-vc7-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7/libboost_regex-vc7-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/cregex.cpp + +vc7/libboost_regex-vc7-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/fileiter.cpp + +vc7/libboost_regex-vc7-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/icu.cpp + +vc7/libboost_regex-vc7-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/instances.cpp + +vc7/libboost_regex-vc7-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/posix_api.cpp + +vc7/libboost_regex-vc7-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/regex.cpp + +vc7/libboost_regex-vc7-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/regex_debug.cpp + +vc7/libboost_regex-vc7-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7/libboost_regex-vc7-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7/libboost_regex-vc7-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/static_mutex.cpp + +vc7/libboost_regex-vc7-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/usinstances.cpp + +vc7/libboost_regex-vc7-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc7/libboost_regex-vc7-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc7/libboost_regex-vc7-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/wide_posix_api.cpp + +vc7/libboost_regex-vc7-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-s-1_47/ -Fdvc7/libboost_regex-vc7-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-s-1_47_dir : + @if not exist "vc7\libboost_regex-vc7-s-1_47\$(NULL)" mkdir vc7\libboost_regex-vc7-s-1_47 + +libboost_regex-vc7-s-1_47_clean : + del vc7\libboost_regex-vc7-s-1_47\*.obj + del vc7\libboost_regex-vc7-s-1_47\*.idb + del vc7\libboost_regex-vc7-s-1_47\*.exp + del vc7\libboost_regex-vc7-s-1_47\*.pch + +./vc7/libboost_regex-vc7-s-1_47.lib : vc7/libboost_regex-vc7-s-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-s-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-s-1_47/cregex.obj vc7/libboost_regex-vc7-s-1_47/fileiter.obj vc7/libboost_regex-vc7-s-1_47/icu.obj vc7/libboost_regex-vc7-s-1_47/instances.obj vc7/libboost_regex-vc7-s-1_47/posix_api.obj vc7/libboost_regex-vc7-s-1_47/regex.obj vc7/libboost_regex-vc7-s-1_47/regex_debug.obj vc7/libboost_regex-vc7-s-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-s-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-s-1_47/static_mutex.obj vc7/libboost_regex-vc7-s-1_47/usinstances.obj vc7/libboost_regex-vc7-s-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-s-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-s-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-s-1_47/winstances.obj + link -lib /nologo /out:vc7/libboost_regex-vc7-s-1_47.lib $(XSFLAGS) vc7/libboost_regex-vc7-s-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-s-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-s-1_47/cregex.obj vc7/libboost_regex-vc7-s-1_47/fileiter.obj vc7/libboost_regex-vc7-s-1_47/icu.obj vc7/libboost_regex-vc7-s-1_47/instances.obj vc7/libboost_regex-vc7-s-1_47/posix_api.obj vc7/libboost_regex-vc7-s-1_47/regex.obj vc7/libboost_regex-vc7-s-1_47/regex_debug.obj vc7/libboost_regex-vc7-s-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-s-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-s-1_47/static_mutex.obj vc7/libboost_regex-vc7-s-1_47/usinstances.obj vc7/libboost_regex-vc7-s-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-s-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-s-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc7-mt-s-1_47.lib +# +######################################################## +vc7/libboost_regex-vc7-mt-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/c_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/cregex.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/fileiter.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/icu.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/instances.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/posix_api.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/regex.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/regex_debug.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/static_mutex.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/usinstances.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/wide_posix_api.cpp + +vc7/libboost_regex-vc7-mt-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-s-1_47/ -Fdvc7/libboost_regex-vc7-mt-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-mt-s-1_47_dir : + @if not exist "vc7\libboost_regex-vc7-mt-s-1_47\$(NULL)" mkdir vc7\libboost_regex-vc7-mt-s-1_47 + +libboost_regex-vc7-mt-s-1_47_clean : + del vc7\libboost_regex-vc7-mt-s-1_47\*.obj + del vc7\libboost_regex-vc7-mt-s-1_47\*.idb + del vc7\libboost_regex-vc7-mt-s-1_47\*.exp + del vc7\libboost_regex-vc7-mt-s-1_47\*.pch + +./vc7/libboost_regex-vc7-mt-s-1_47.lib : vc7/libboost_regex-vc7-mt-s-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-mt-s-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-mt-s-1_47/cregex.obj vc7/libboost_regex-vc7-mt-s-1_47/fileiter.obj vc7/libboost_regex-vc7-mt-s-1_47/icu.obj vc7/libboost_regex-vc7-mt-s-1_47/instances.obj vc7/libboost_regex-vc7-mt-s-1_47/posix_api.obj vc7/libboost_regex-vc7-mt-s-1_47/regex.obj vc7/libboost_regex-vc7-mt-s-1_47/regex_debug.obj vc7/libboost_regex-vc7-mt-s-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-mt-s-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-mt-s-1_47/static_mutex.obj vc7/libboost_regex-vc7-mt-s-1_47/usinstances.obj vc7/libboost_regex-vc7-mt-s-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-mt-s-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-mt-s-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-mt-s-1_47/winstances.obj + link -lib /nologo /out:vc7/libboost_regex-vc7-mt-s-1_47.lib $(XSFLAGS) vc7/libboost_regex-vc7-mt-s-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-mt-s-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-mt-s-1_47/cregex.obj vc7/libboost_regex-vc7-mt-s-1_47/fileiter.obj vc7/libboost_regex-vc7-mt-s-1_47/icu.obj vc7/libboost_regex-vc7-mt-s-1_47/instances.obj vc7/libboost_regex-vc7-mt-s-1_47/posix_api.obj vc7/libboost_regex-vc7-mt-s-1_47/regex.obj vc7/libboost_regex-vc7-mt-s-1_47/regex_debug.obj vc7/libboost_regex-vc7-mt-s-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-mt-s-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-mt-s-1_47/static_mutex.obj vc7/libboost_regex-vc7-mt-s-1_47/usinstances.obj vc7/libboost_regex-vc7-mt-s-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-mt-s-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-mt-s-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-mt-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc7-sgd-1_47.lib +# +######################################################## +vc7/libboost_regex-vc7-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc7/libboost_regex-vc7-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7/libboost_regex-vc7-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/cregex.cpp + +vc7/libboost_regex-vc7-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/fileiter.cpp + +vc7/libboost_regex-vc7-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/icu.cpp + +vc7/libboost_regex-vc7-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/instances.cpp + +vc7/libboost_regex-vc7-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/posix_api.cpp + +vc7/libboost_regex-vc7-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/regex.cpp + +vc7/libboost_regex-vc7-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/regex_debug.cpp + +vc7/libboost_regex-vc7-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7/libboost_regex-vc7-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7/libboost_regex-vc7-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/static_mutex.cpp + +vc7/libboost_regex-vc7-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/usinstances.cpp + +vc7/libboost_regex-vc7-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc7/libboost_regex-vc7-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc7/libboost_regex-vc7-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc7/libboost_regex-vc7-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-sgd-1_47/ -Fdvc7/libboost_regex-vc7-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-sgd-1_47_dir : + @if not exist "vc7\libboost_regex-vc7-sgd-1_47\$(NULL)" mkdir vc7\libboost_regex-vc7-sgd-1_47 + +libboost_regex-vc7-sgd-1_47_clean : + del vc7\libboost_regex-vc7-sgd-1_47\*.obj + del vc7\libboost_regex-vc7-sgd-1_47\*.idb + del vc7\libboost_regex-vc7-sgd-1_47\*.exp + del vc7\libboost_regex-vc7-sgd-1_47\*.pch + +./vc7/libboost_regex-vc7-sgd-1_47.lib : vc7/libboost_regex-vc7-sgd-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-sgd-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-sgd-1_47/cregex.obj vc7/libboost_regex-vc7-sgd-1_47/fileiter.obj vc7/libboost_regex-vc7-sgd-1_47/icu.obj vc7/libboost_regex-vc7-sgd-1_47/instances.obj vc7/libboost_regex-vc7-sgd-1_47/posix_api.obj vc7/libboost_regex-vc7-sgd-1_47/regex.obj vc7/libboost_regex-vc7-sgd-1_47/regex_debug.obj vc7/libboost_regex-vc7-sgd-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-sgd-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-sgd-1_47/static_mutex.obj vc7/libboost_regex-vc7-sgd-1_47/usinstances.obj vc7/libboost_regex-vc7-sgd-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-sgd-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-sgd-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-sgd-1_47/winstances.obj + link -lib /nologo /out:vc7/libboost_regex-vc7-sgd-1_47.lib $(XSFLAGS) vc7/libboost_regex-vc7-sgd-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-sgd-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-sgd-1_47/cregex.obj vc7/libboost_regex-vc7-sgd-1_47/fileiter.obj vc7/libboost_regex-vc7-sgd-1_47/icu.obj vc7/libboost_regex-vc7-sgd-1_47/instances.obj vc7/libboost_regex-vc7-sgd-1_47/posix_api.obj vc7/libboost_regex-vc7-sgd-1_47/regex.obj vc7/libboost_regex-vc7-sgd-1_47/regex_debug.obj vc7/libboost_regex-vc7-sgd-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-sgd-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-sgd-1_47/static_mutex.obj vc7/libboost_regex-vc7-sgd-1_47/usinstances.obj vc7/libboost_regex-vc7-sgd-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-sgd-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-sgd-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-sgd-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc7-mt-sgd-1_47.lib +# +######################################################## +vc7/libboost_regex-vc7-mt-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/cregex.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/fileiter.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/icu.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/instances.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/posix_api.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/regex.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/regex_debug.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/static_mutex.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/usinstances.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc7/libboost_regex-vc7-mt-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-sgd-1_47/ -Fdvc7/libboost_regex-vc7-mt-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-mt-sgd-1_47_dir : + @if not exist "vc7\libboost_regex-vc7-mt-sgd-1_47\$(NULL)" mkdir vc7\libboost_regex-vc7-mt-sgd-1_47 + +libboost_regex-vc7-mt-sgd-1_47_clean : + del vc7\libboost_regex-vc7-mt-sgd-1_47\*.obj + del vc7\libboost_regex-vc7-mt-sgd-1_47\*.idb + del vc7\libboost_regex-vc7-mt-sgd-1_47\*.exp + del vc7\libboost_regex-vc7-mt-sgd-1_47\*.pch + +./vc7/libboost_regex-vc7-mt-sgd-1_47.lib : vc7/libboost_regex-vc7-mt-sgd-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-mt-sgd-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-mt-sgd-1_47/cregex.obj vc7/libboost_regex-vc7-mt-sgd-1_47/fileiter.obj vc7/libboost_regex-vc7-mt-sgd-1_47/icu.obj vc7/libboost_regex-vc7-mt-sgd-1_47/instances.obj vc7/libboost_regex-vc7-mt-sgd-1_47/posix_api.obj vc7/libboost_regex-vc7-mt-sgd-1_47/regex.obj vc7/libboost_regex-vc7-mt-sgd-1_47/regex_debug.obj vc7/libboost_regex-vc7-mt-sgd-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-mt-sgd-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-mt-sgd-1_47/static_mutex.obj vc7/libboost_regex-vc7-mt-sgd-1_47/usinstances.obj vc7/libboost_regex-vc7-mt-sgd-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-mt-sgd-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-mt-sgd-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-mt-sgd-1_47/winstances.obj + link -lib /nologo /out:vc7/libboost_regex-vc7-mt-sgd-1_47.lib $(XSFLAGS) vc7/libboost_regex-vc7-mt-sgd-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-mt-sgd-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-mt-sgd-1_47/cregex.obj vc7/libboost_regex-vc7-mt-sgd-1_47/fileiter.obj vc7/libboost_regex-vc7-mt-sgd-1_47/icu.obj vc7/libboost_regex-vc7-mt-sgd-1_47/instances.obj vc7/libboost_regex-vc7-mt-sgd-1_47/posix_api.obj vc7/libboost_regex-vc7-mt-sgd-1_47/regex.obj vc7/libboost_regex-vc7-mt-sgd-1_47/regex_debug.obj vc7/libboost_regex-vc7-mt-sgd-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-mt-sgd-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-mt-sgd-1_47/static_mutex.obj vc7/libboost_regex-vc7-mt-sgd-1_47/usinstances.obj vc7/libboost_regex-vc7-mt-sgd-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-mt-sgd-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-mt-sgd-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-mt-sgd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc7-mt-gd-1_47.lib +# +######################################################## +vc7/boost_regex-vc7-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/cregex.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/icu.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/instances.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/regex.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc7/boost_regex-vc7-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-gd-1_47/ -Fdvc7/boost_regex-vc7-mt-gd-1_47.pdb ../src/winstances.cpp + +boost_regex-vc7-mt-gd-1_47_dir : + @if not exist "vc7\boost_regex-vc7-mt-gd-1_47\$(NULL)" mkdir vc7\boost_regex-vc7-mt-gd-1_47 + +boost_regex-vc7-mt-gd-1_47_clean : + del vc7\boost_regex-vc7-mt-gd-1_47\*.obj + del vc7\boost_regex-vc7-mt-gd-1_47\*.idb + del vc7\boost_regex-vc7-mt-gd-1_47\*.exp + del vc7\boost_regex-vc7-mt-gd-1_47\*.pch + +./vc7/boost_regex-vc7-mt-gd-1_47.lib : vc7/boost_regex-vc7-mt-gd-1_47/c_regex_traits.obj vc7/boost_regex-vc7-mt-gd-1_47/cpp_regex_traits.obj vc7/boost_regex-vc7-mt-gd-1_47/cregex.obj vc7/boost_regex-vc7-mt-gd-1_47/fileiter.obj vc7/boost_regex-vc7-mt-gd-1_47/icu.obj vc7/boost_regex-vc7-mt-gd-1_47/instances.obj vc7/boost_regex-vc7-mt-gd-1_47/posix_api.obj vc7/boost_regex-vc7-mt-gd-1_47/regex.obj vc7/boost_regex-vc7-mt-gd-1_47/regex_debug.obj vc7/boost_regex-vc7-mt-gd-1_47/regex_raw_buffer.obj vc7/boost_regex-vc7-mt-gd-1_47/regex_traits_defaults.obj vc7/boost_regex-vc7-mt-gd-1_47/static_mutex.obj vc7/boost_regex-vc7-mt-gd-1_47/usinstances.obj vc7/boost_regex-vc7-mt-gd-1_47/w32_regex_traits.obj vc7/boost_regex-vc7-mt-gd-1_47/wc_regex_traits.obj vc7/boost_regex-vc7-mt-gd-1_47/wide_posix_api.obj vc7/boost_regex-vc7-mt-gd-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc7/boost_regex-vc7-mt-gd-1_47.pdb" /debug /machine:I386 /out:"vc7/boost_regex-vc7-mt-gd-1_47.dll" /implib:"vc7/boost_regex-vc7-mt-gd-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc7/boost_regex-vc7-mt-gd-1_47/c_regex_traits.obj vc7/boost_regex-vc7-mt-gd-1_47/cpp_regex_traits.obj vc7/boost_regex-vc7-mt-gd-1_47/cregex.obj vc7/boost_regex-vc7-mt-gd-1_47/fileiter.obj vc7/boost_regex-vc7-mt-gd-1_47/icu.obj vc7/boost_regex-vc7-mt-gd-1_47/instances.obj vc7/boost_regex-vc7-mt-gd-1_47/posix_api.obj vc7/boost_regex-vc7-mt-gd-1_47/regex.obj vc7/boost_regex-vc7-mt-gd-1_47/regex_debug.obj vc7/boost_regex-vc7-mt-gd-1_47/regex_raw_buffer.obj vc7/boost_regex-vc7-mt-gd-1_47/regex_traits_defaults.obj vc7/boost_regex-vc7-mt-gd-1_47/static_mutex.obj vc7/boost_regex-vc7-mt-gd-1_47/usinstances.obj vc7/boost_regex-vc7-mt-gd-1_47/w32_regex_traits.obj vc7/boost_regex-vc7-mt-gd-1_47/wc_regex_traits.obj vc7/boost_regex-vc7-mt-gd-1_47/wide_posix_api.obj vc7/boost_regex-vc7-mt-gd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc7-mt-1_47.lib +# +######################################################## +vc7/boost_regex-vc7-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc7/boost_regex-vc7-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7/boost_regex-vc7-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/cregex.cpp + +vc7/boost_regex-vc7-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/fileiter.cpp + +vc7/boost_regex-vc7-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/icu.cpp + +vc7/boost_regex-vc7-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/instances.cpp + +vc7/boost_regex-vc7-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/posix_api.cpp + +vc7/boost_regex-vc7-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/regex.cpp + +vc7/boost_regex-vc7-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/regex_debug.cpp + +vc7/boost_regex-vc7-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7/boost_regex-vc7-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7/boost_regex-vc7-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/static_mutex.cpp + +vc7/boost_regex-vc7-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/usinstances.cpp + +vc7/boost_regex-vc7-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc7/boost_regex-vc7-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc7/boost_regex-vc7-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc7/boost_regex-vc7-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/boost_regex-vc7-mt-1_47/ -Fdvc7/boost_regex-vc7-mt-1_47.pdb ../src/winstances.cpp + +boost_regex-vc7-mt-1_47_dir : + @if not exist "vc7\boost_regex-vc7-mt-1_47\$(NULL)" mkdir vc7\boost_regex-vc7-mt-1_47 + +boost_regex-vc7-mt-1_47_clean : + del vc7\boost_regex-vc7-mt-1_47\*.obj + del vc7\boost_regex-vc7-mt-1_47\*.idb + del vc7\boost_regex-vc7-mt-1_47\*.exp + del vc7\boost_regex-vc7-mt-1_47\*.pch + +./vc7/boost_regex-vc7-mt-1_47.lib : vc7/boost_regex-vc7-mt-1_47/c_regex_traits.obj vc7/boost_regex-vc7-mt-1_47/cpp_regex_traits.obj vc7/boost_regex-vc7-mt-1_47/cregex.obj vc7/boost_regex-vc7-mt-1_47/fileiter.obj vc7/boost_regex-vc7-mt-1_47/icu.obj vc7/boost_regex-vc7-mt-1_47/instances.obj vc7/boost_regex-vc7-mt-1_47/posix_api.obj vc7/boost_regex-vc7-mt-1_47/regex.obj vc7/boost_regex-vc7-mt-1_47/regex_debug.obj vc7/boost_regex-vc7-mt-1_47/regex_raw_buffer.obj vc7/boost_regex-vc7-mt-1_47/regex_traits_defaults.obj vc7/boost_regex-vc7-mt-1_47/static_mutex.obj vc7/boost_regex-vc7-mt-1_47/usinstances.obj vc7/boost_regex-vc7-mt-1_47/w32_regex_traits.obj vc7/boost_regex-vc7-mt-1_47/wc_regex_traits.obj vc7/boost_regex-vc7-mt-1_47/wide_posix_api.obj vc7/boost_regex-vc7-mt-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc7/boost_regex-vc7-mt-1_47.pdb" /debug /machine:I386 /out:"vc7/boost_regex-vc7-mt-1_47.dll" /implib:"vc7/boost_regex-vc7-mt-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc7/boost_regex-vc7-mt-1_47/c_regex_traits.obj vc7/boost_regex-vc7-mt-1_47/cpp_regex_traits.obj vc7/boost_regex-vc7-mt-1_47/cregex.obj vc7/boost_regex-vc7-mt-1_47/fileiter.obj vc7/boost_regex-vc7-mt-1_47/icu.obj vc7/boost_regex-vc7-mt-1_47/instances.obj vc7/boost_regex-vc7-mt-1_47/posix_api.obj vc7/boost_regex-vc7-mt-1_47/regex.obj vc7/boost_regex-vc7-mt-1_47/regex_debug.obj vc7/boost_regex-vc7-mt-1_47/regex_raw_buffer.obj vc7/boost_regex-vc7-mt-1_47/regex_traits_defaults.obj vc7/boost_regex-vc7-mt-1_47/static_mutex.obj vc7/boost_regex-vc7-mt-1_47/usinstances.obj vc7/boost_regex-vc7-mt-1_47/w32_regex_traits.obj vc7/boost_regex-vc7-mt-1_47/wc_regex_traits.obj vc7/boost_regex-vc7-mt-1_47/wide_posix_api.obj vc7/boost_regex-vc7-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc7-mt-1_47.lib +# +######################################################## +vc7/libboost_regex-vc7-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/cregex.cpp + +vc7/libboost_regex-vc7-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/fileiter.cpp + +vc7/libboost_regex-vc7-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/icu.cpp + +vc7/libboost_regex-vc7-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/instances.cpp + +vc7/libboost_regex-vc7-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/posix_api.cpp + +vc7/libboost_regex-vc7-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/regex.cpp + +vc7/libboost_regex-vc7-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/regex_debug.cpp + +vc7/libboost_regex-vc7-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7/libboost_regex-vc7-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7/libboost_regex-vc7-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/static_mutex.cpp + +vc7/libboost_regex-vc7-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/usinstances.cpp + +vc7/libboost_regex-vc7-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc7/libboost_regex-vc7-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-1_47/ -Fdvc7/libboost_regex-vc7-mt-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-mt-1_47_dir : + @if not exist "vc7\libboost_regex-vc7-mt-1_47\$(NULL)" mkdir vc7\libboost_regex-vc7-mt-1_47 + +libboost_regex-vc7-mt-1_47_clean : + del vc7\libboost_regex-vc7-mt-1_47\*.obj + del vc7\libboost_regex-vc7-mt-1_47\*.idb + del vc7\libboost_regex-vc7-mt-1_47\*.exp + del vc7\libboost_regex-vc7-mt-1_47\*.pch + +./vc7/libboost_regex-vc7-mt-1_47.lib : vc7/libboost_regex-vc7-mt-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-mt-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-mt-1_47/cregex.obj vc7/libboost_regex-vc7-mt-1_47/fileiter.obj vc7/libboost_regex-vc7-mt-1_47/icu.obj vc7/libboost_regex-vc7-mt-1_47/instances.obj vc7/libboost_regex-vc7-mt-1_47/posix_api.obj vc7/libboost_regex-vc7-mt-1_47/regex.obj vc7/libboost_regex-vc7-mt-1_47/regex_debug.obj vc7/libboost_regex-vc7-mt-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-mt-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-mt-1_47/static_mutex.obj vc7/libboost_regex-vc7-mt-1_47/usinstances.obj vc7/libboost_regex-vc7-mt-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-mt-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-mt-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-mt-1_47/winstances.obj + link -lib /nologo /out:vc7/libboost_regex-vc7-mt-1_47.lib $(XSFLAGS) vc7/libboost_regex-vc7-mt-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-mt-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-mt-1_47/cregex.obj vc7/libboost_regex-vc7-mt-1_47/fileiter.obj vc7/libboost_regex-vc7-mt-1_47/icu.obj vc7/libboost_regex-vc7-mt-1_47/instances.obj vc7/libboost_regex-vc7-mt-1_47/posix_api.obj vc7/libboost_regex-vc7-mt-1_47/regex.obj vc7/libboost_regex-vc7-mt-1_47/regex_debug.obj vc7/libboost_regex-vc7-mt-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-mt-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-mt-1_47/static_mutex.obj vc7/libboost_regex-vc7-mt-1_47/usinstances.obj vc7/libboost_regex-vc7-mt-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-mt-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-mt-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc7-mt-gd-1_47.lib +# +######################################################## +vc7/libboost_regex-vc7-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/cregex.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/icu.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/instances.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/regex.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc7/libboost_regex-vc7-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc7/libboost_regex-vc7-mt-gd-1_47/ -Fdvc7/libboost_regex-vc7-mt-gd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc7-mt-gd-1_47_dir : + @if not exist "vc7\libboost_regex-vc7-mt-gd-1_47\$(NULL)" mkdir vc7\libboost_regex-vc7-mt-gd-1_47 + +libboost_regex-vc7-mt-gd-1_47_clean : + del vc7\libboost_regex-vc7-mt-gd-1_47\*.obj + del vc7\libboost_regex-vc7-mt-gd-1_47\*.idb + del vc7\libboost_regex-vc7-mt-gd-1_47\*.exp + del vc7\libboost_regex-vc7-mt-gd-1_47\*.pch + +./vc7/libboost_regex-vc7-mt-gd-1_47.lib : vc7/libboost_regex-vc7-mt-gd-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-mt-gd-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-mt-gd-1_47/cregex.obj vc7/libboost_regex-vc7-mt-gd-1_47/fileiter.obj vc7/libboost_regex-vc7-mt-gd-1_47/icu.obj vc7/libboost_regex-vc7-mt-gd-1_47/instances.obj vc7/libboost_regex-vc7-mt-gd-1_47/posix_api.obj vc7/libboost_regex-vc7-mt-gd-1_47/regex.obj vc7/libboost_regex-vc7-mt-gd-1_47/regex_debug.obj vc7/libboost_regex-vc7-mt-gd-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-mt-gd-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-mt-gd-1_47/static_mutex.obj vc7/libboost_regex-vc7-mt-gd-1_47/usinstances.obj vc7/libboost_regex-vc7-mt-gd-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-mt-gd-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-mt-gd-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-mt-gd-1_47/winstances.obj + link -lib /nologo /out:vc7/libboost_regex-vc7-mt-gd-1_47.lib $(XSFLAGS) vc7/libboost_regex-vc7-mt-gd-1_47/c_regex_traits.obj vc7/libboost_regex-vc7-mt-gd-1_47/cpp_regex_traits.obj vc7/libboost_regex-vc7-mt-gd-1_47/cregex.obj vc7/libboost_regex-vc7-mt-gd-1_47/fileiter.obj vc7/libboost_regex-vc7-mt-gd-1_47/icu.obj vc7/libboost_regex-vc7-mt-gd-1_47/instances.obj vc7/libboost_regex-vc7-mt-gd-1_47/posix_api.obj vc7/libboost_regex-vc7-mt-gd-1_47/regex.obj vc7/libboost_regex-vc7-mt-gd-1_47/regex_debug.obj vc7/libboost_regex-vc7-mt-gd-1_47/regex_raw_buffer.obj vc7/libboost_regex-vc7-mt-gd-1_47/regex_traits_defaults.obj vc7/libboost_regex-vc7-mt-gd-1_47/static_mutex.obj vc7/libboost_regex-vc7-mt-gd-1_47/usinstances.obj vc7/libboost_regex-vc7-mt-gd-1_47/w32_regex_traits.obj vc7/libboost_regex-vc7-mt-gd-1_47/wc_regex_traits.obj vc7/libboost_regex-vc7-mt-gd-1_47/wide_posix_api.obj vc7/libboost_regex-vc7-mt-gd-1_47/winstances.obj + diff --git a/libs/regex/build/vc71-stlport.mak b/libs/regex/build/vc71-stlport.mak new file mode 100644 index 0000000000..1357a015d8 --- /dev/null +++ b/libs/regex/build/vc71-stlport.mak @@ -0,0 +1,496 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for VC6+STLPort +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# ICU setup: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(STLPORT_PATH)" == "" +!ERROR Variable STLPORT_PATH not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc71-mt-sp-1_47_dir ./vc71-stlport/libboost_regex-vc71-mt-sp-1_47.lib boost_regex-vc71-mt-p-1_47_dir ./vc71-stlport/boost_regex-vc71-mt-p-1_47.lib libboost_regex-vc71-mt-p-1_47_dir ./vc71-stlport/libboost_regex-vc71-mt-p-1_47.lib boost_regex-vc71-mt-gdp-1_47_dir ./vc71-stlport/boost_regex-vc71-mt-gdp-1_47.lib libboost_regex-vc71-mt-sgdp-1_47_dir ./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.lib libboost_regex-vc71-mt-gdp-1_47_dir ./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47.lib + +clean : libboost_regex-vc71-mt-sp-1_47_clean boost_regex-vc71-mt-p-1_47_clean libboost_regex-vc71-mt-p-1_47_clean boost_regex-vc71-mt-gdp-1_47_clean libboost_regex-vc71-mt-sgdp-1_47_clean libboost_regex-vc71-mt-gdp-1_47_clean + +install : stlport_check all + copy vc71-stlport\libboost_regex-vc71-mt-sp-1_47.lib "$(MSVCDIR)\lib" + copy vc71-stlport\boost_regex-vc71-mt-p-1_47.lib "$(MSVCDIR)\lib" + copy vc71-stlport\boost_regex-vc71-mt-p-1_47.dll "$(MSVCDIR)\bin" + copy vc71-stlport\libboost_regex-vc71-mt-p-1_47.lib "$(MSVCDIR)\lib" + copy vc71-stlport\boost_regex-vc71-mt-gdp-1_47.lib "$(MSVCDIR)\lib" + copy vc71-stlport\boost_regex-vc71-mt-gdp-1_47.dll "$(MSVCDIR)\bin" + copy vc71-stlport\boost_regex-vc71-mt-gdp-1_47.pdb "$(MSVCDIR)\lib" + copy vc71-stlport\libboost_regex-vc71-mt-sgdp-1_47.lib "$(MSVCDIR)\lib" + copy vc71-stlport\libboost_regex-vc71-mt-sgdp-1_47.pdb "$(MSVCDIR)\lib" + copy vc71-stlport\libboost_regex-vc71-mt-gdp-1_47.lib "$(MSVCDIR)\lib" + copy vc71-stlport\libboost_regex-vc71-mt-gdp-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc71-stlport\$(NULL)" mkdir vc71-stlport + +stlport_check : "$(STLPORT_PATH)\stlport\string" + echo + + +######################################################## +# +# section for libboost_regex-vc71-mt-sp-1_47.lib +# +######################################################## +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/c_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/cregex.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/fileiter.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/icu.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/instances.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/posix_api.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/regex.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/regex_debug.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/static_mutex.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/usinstances.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/w32_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/wc_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/wide_posix_api.cpp + +vc71-stlport/libboost_regex-vc71-mt-sp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-mt-sp-1_47_dir : + @if not exist "vc71-stlport\libboost_regex-vc71-mt-sp-1_47\$(NULL)" mkdir vc71-stlport\libboost_regex-vc71-mt-sp-1_47 + +libboost_regex-vc71-mt-sp-1_47_clean : + del vc71-stlport\libboost_regex-vc71-mt-sp-1_47\*.obj + del vc71-stlport\libboost_regex-vc71-mt-sp-1_47\*.idb + del vc71-stlport\libboost_regex-vc71-mt-sp-1_47\*.exp + del vc71-stlport\libboost_regex-vc71-mt-sp-1_47\*.pch + +./vc71-stlport/libboost_regex-vc71-mt-sp-1_47.lib : vc71-stlport/libboost_regex-vc71-mt-sp-1_47/c_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/cpp_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/cregex.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/fileiter.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/icu.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/instances.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/posix_api.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_debug.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_raw_buffer.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_traits_defaults.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/static_mutex.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/usinstances.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/w32_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/wc_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/wide_posix_api.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/winstances.obj + link -lib /nologo /out:vc71-stlport/libboost_regex-vc71-mt-sp-1_47.lib $(XSFLAGS) vc71-stlport/libboost_regex-vc71-mt-sp-1_47/c_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/cpp_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/cregex.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/fileiter.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/icu.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/instances.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/posix_api.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_debug.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_raw_buffer.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/regex_traits_defaults.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/static_mutex.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/usinstances.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/w32_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/wc_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/wide_posix_api.obj vc71-stlport/libboost_regex-vc71-mt-sp-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc71-mt-p-1_47.lib +# +######################################################## +vc71-stlport/boost_regex-vc71-mt-p-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/c_regex_traits.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/cregex.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/fileiter.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/icu.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/instances.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/posix_api.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/regex.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/regex_debug.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/static_mutex.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/usinstances.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/w32_regex_traits.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/wc_regex_traits.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/wide_posix_api.cpp + +vc71-stlport/boost_regex-vc71-mt-p-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-p-1_47.pdb ../src/winstances.cpp + +boost_regex-vc71-mt-p-1_47_dir : + @if not exist "vc71-stlport\boost_regex-vc71-mt-p-1_47\$(NULL)" mkdir vc71-stlport\boost_regex-vc71-mt-p-1_47 + +boost_regex-vc71-mt-p-1_47_clean : + del vc71-stlport\boost_regex-vc71-mt-p-1_47\*.obj + del vc71-stlport\boost_regex-vc71-mt-p-1_47\*.idb + del vc71-stlport\boost_regex-vc71-mt-p-1_47\*.exp + del vc71-stlport\boost_regex-vc71-mt-p-1_47\*.pch + +./vc71-stlport/boost_regex-vc71-mt-p-1_47.lib : vc71-stlport/boost_regex-vc71-mt-p-1_47/c_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/cpp_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/cregex.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/fileiter.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/icu.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/instances.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/posix_api.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/regex.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_debug.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_raw_buffer.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_traits_defaults.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/static_mutex.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/usinstances.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/w32_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/wc_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/wide_posix_api.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc71-stlport/boost_regex-vc71-mt-p-1_47.pdb" /debug /machine:I386 /out:"vc71-stlport/boost_regex-vc71-mt-p-1_47.dll" /implib:"vc71-stlport/boost_regex-vc71-mt-p-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc71-stlport/boost_regex-vc71-mt-p-1_47/c_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/cpp_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/cregex.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/fileiter.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/icu.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/instances.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/posix_api.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/regex.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_debug.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_raw_buffer.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/regex_traits_defaults.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/static_mutex.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/usinstances.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/w32_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/wc_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/wide_posix_api.obj vc71-stlport/boost_regex-vc71-mt-p-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc71-mt-p-1_47.lib +# +######################################################## +vc71-stlport/libboost_regex-vc71-mt-p-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/c_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/cregex.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/fileiter.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/icu.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/instances.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/posix_api.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/regex.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/regex_debug.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/static_mutex.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/usinstances.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/w32_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/wc_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/wide_posix_api.cpp + +vc71-stlport/libboost_regex-vc71-mt-p-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-p-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-p-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-mt-p-1_47_dir : + @if not exist "vc71-stlport\libboost_regex-vc71-mt-p-1_47\$(NULL)" mkdir vc71-stlport\libboost_regex-vc71-mt-p-1_47 + +libboost_regex-vc71-mt-p-1_47_clean : + del vc71-stlport\libboost_regex-vc71-mt-p-1_47\*.obj + del vc71-stlport\libboost_regex-vc71-mt-p-1_47\*.idb + del vc71-stlport\libboost_regex-vc71-mt-p-1_47\*.exp + del vc71-stlport\libboost_regex-vc71-mt-p-1_47\*.pch + +./vc71-stlport/libboost_regex-vc71-mt-p-1_47.lib : vc71-stlport/libboost_regex-vc71-mt-p-1_47/c_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/cpp_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/cregex.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/fileiter.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/icu.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/instances.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/posix_api.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_debug.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_raw_buffer.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_traits_defaults.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/static_mutex.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/usinstances.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/w32_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/wc_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/wide_posix_api.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/winstances.obj + link -lib /nologo /out:vc71-stlport/libboost_regex-vc71-mt-p-1_47.lib $(XSFLAGS) vc71-stlport/libboost_regex-vc71-mt-p-1_47/c_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/cpp_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/cregex.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/fileiter.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/icu.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/instances.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/posix_api.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_debug.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_raw_buffer.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/regex_traits_defaults.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/static_mutex.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/usinstances.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/w32_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/wc_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/wide_posix_api.obj vc71-stlport/libboost_regex-vc71-mt-p-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc71-mt-gdp-1_47.lib +# +######################################################## +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/c_regex_traits.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/cregex.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/fileiter.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/icu.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/instances.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/posix_api.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/regex.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/regex_debug.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/static_mutex.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/usinstances.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/wide_posix_api.cpp + +vc71-stlport/boost_regex-vc71-mt-gdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/boost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb ../src/winstances.cpp + +boost_regex-vc71-mt-gdp-1_47_dir : + @if not exist "vc71-stlport\boost_regex-vc71-mt-gdp-1_47\$(NULL)" mkdir vc71-stlport\boost_regex-vc71-mt-gdp-1_47 + +boost_regex-vc71-mt-gdp-1_47_clean : + del vc71-stlport\boost_regex-vc71-mt-gdp-1_47\*.obj + del vc71-stlport\boost_regex-vc71-mt-gdp-1_47\*.idb + del vc71-stlport\boost_regex-vc71-mt-gdp-1_47\*.exp + del vc71-stlport\boost_regex-vc71-mt-gdp-1_47\*.pch + +./vc71-stlport/boost_regex-vc71-mt-gdp-1_47.lib : vc71-stlport/boost_regex-vc71-mt-gdp-1_47/c_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/cpp_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/cregex.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/fileiter.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/icu.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/instances.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/posix_api.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_debug.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_raw_buffer.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_traits_defaults.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/static_mutex.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/usinstances.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/w32_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/wc_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/wide_posix_api.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc71-stlport/boost_regex-vc71-mt-gdp-1_47.pdb" /debug /machine:I386 /out:"vc71-stlport/boost_regex-vc71-mt-gdp-1_47.dll" /implib:"vc71-stlport/boost_regex-vc71-mt-gdp-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc71-stlport/boost_regex-vc71-mt-gdp-1_47/c_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/cpp_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/cregex.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/fileiter.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/icu.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/instances.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/posix_api.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_debug.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_raw_buffer.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/regex_traits_defaults.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/static_mutex.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/usinstances.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/w32_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/wc_regex_traits.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/wide_posix_api.obj vc71-stlport/boost_regex-vc71-mt-gdp-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc71-mt-sgdp-1_47.lib +# +######################################################## +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/c_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/cregex.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/fileiter.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/icu.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/instances.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/posix_api.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/regex.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/regex_debug.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/static_mutex.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/usinstances.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/wide_posix_api.cpp + +vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-mt-sgdp-1_47_dir : + @if not exist "vc71-stlport\libboost_regex-vc71-mt-sgdp-1_47\$(NULL)" mkdir vc71-stlport\libboost_regex-vc71-mt-sgdp-1_47 + +libboost_regex-vc71-mt-sgdp-1_47_clean : + del vc71-stlport\libboost_regex-vc71-mt-sgdp-1_47\*.obj + del vc71-stlport\libboost_regex-vc71-mt-sgdp-1_47\*.idb + del vc71-stlport\libboost_regex-vc71-mt-sgdp-1_47\*.exp + del vc71-stlport\libboost_regex-vc71-mt-sgdp-1_47\*.pch + +./vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.lib : vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/c_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/cpp_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/cregex.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/fileiter.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/icu.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/instances.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/posix_api.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_debug.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_raw_buffer.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_traits_defaults.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/static_mutex.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/usinstances.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/w32_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/wc_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/wide_posix_api.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/winstances.obj + link -lib /nologo /out:vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47.lib $(XSFLAGS) vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/c_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/cpp_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/cregex.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/fileiter.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/icu.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/instances.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/posix_api.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_debug.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_raw_buffer.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/regex_traits_defaults.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/static_mutex.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/usinstances.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/w32_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/wc_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/wide_posix_api.obj vc71-stlport/libboost_regex-vc71-mt-sgdp-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc71-mt-gdp-1_47.lib +# +######################################################## +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/c_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/cregex.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/fileiter.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/icu.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/instances.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/posix_api.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/regex.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/regex_debug.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/static_mutex.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/usinstances.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/w32_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/wc_regex_traits.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/wide_posix_api.cpp + +vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/ -Fdvc71-stlport/libboost_regex-vc71-mt-gdp-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-mt-gdp-1_47_dir : + @if not exist "vc71-stlport\libboost_regex-vc71-mt-gdp-1_47\$(NULL)" mkdir vc71-stlport\libboost_regex-vc71-mt-gdp-1_47 + +libboost_regex-vc71-mt-gdp-1_47_clean : + del vc71-stlport\libboost_regex-vc71-mt-gdp-1_47\*.obj + del vc71-stlport\libboost_regex-vc71-mt-gdp-1_47\*.idb + del vc71-stlport\libboost_regex-vc71-mt-gdp-1_47\*.exp + del vc71-stlport\libboost_regex-vc71-mt-gdp-1_47\*.pch + +./vc71-stlport/libboost_regex-vc71-mt-gdp-1_47.lib : vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/c_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/cpp_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/cregex.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/fileiter.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/icu.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/instances.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/posix_api.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_debug.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_raw_buffer.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_traits_defaults.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/static_mutex.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/usinstances.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/w32_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/wc_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/wide_posix_api.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/winstances.obj + link -lib /nologo /out:vc71-stlport/libboost_regex-vc71-mt-gdp-1_47.lib $(XSFLAGS) vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/c_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/cpp_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/cregex.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/fileiter.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/icu.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/instances.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/posix_api.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_debug.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_raw_buffer.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/regex_traits_defaults.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/static_mutex.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/usinstances.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/w32_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/wc_regex_traits.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/wide_posix_api.obj vc71-stlport/libboost_regex-vc71-mt-gdp-1_47/winstances.obj + diff --git a/libs/regex/build/vc71.mak b/libs/regex/build/vc71.mak new file mode 100644 index 0000000000..7f0953fcdb --- /dev/null +++ b/libs/regex/build/vc71.mak @@ -0,0 +1,632 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for MSVC compiler +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# path to ICU library installation goes here: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" +MSVCDIR=$(VS71COMNTOOLS)..\..\VC7 +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc71-s-1_47_dir ./vc71/libboost_regex-vc71-s-1_47.lib libboost_regex-vc71-mt-s-1_47_dir ./vc71/libboost_regex-vc71-mt-s-1_47.lib libboost_regex-vc71-sgd-1_47_dir ./vc71/libboost_regex-vc71-sgd-1_47.lib libboost_regex-vc71-mt-sgd-1_47_dir ./vc71/libboost_regex-vc71-mt-sgd-1_47.lib boost_regex-vc71-mt-gd-1_47_dir ./vc71/boost_regex-vc71-mt-gd-1_47.lib boost_regex-vc71-mt-1_47_dir ./vc71/boost_regex-vc71-mt-1_47.lib libboost_regex-vc71-mt-1_47_dir ./vc71/libboost_regex-vc71-mt-1_47.lib libboost_regex-vc71-mt-gd-1_47_dir ./vc71/libboost_regex-vc71-mt-gd-1_47.lib + +clean : libboost_regex-vc71-s-1_47_clean libboost_regex-vc71-mt-s-1_47_clean libboost_regex-vc71-sgd-1_47_clean libboost_regex-vc71-mt-sgd-1_47_clean boost_regex-vc71-mt-gd-1_47_clean boost_regex-vc71-mt-1_47_clean libboost_regex-vc71-mt-1_47_clean libboost_regex-vc71-mt-gd-1_47_clean + +install : all + copy vc71\libboost_regex-vc71-s-1_47.lib "$(MSVCDIR)\lib" + copy vc71\libboost_regex-vc71-mt-s-1_47.lib "$(MSVCDIR)\lib" + copy vc71\libboost_regex-vc71-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc71\libboost_regex-vc71-sgd-1_47.pdb "$(MSVCDIR)\lib" + copy vc71\libboost_regex-vc71-mt-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc71\libboost_regex-vc71-mt-sgd-1_47.pdb "$(MSVCDIR)\lib" + copy vc71\boost_regex-vc71-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc71\boost_regex-vc71-mt-gd-1_47.dll "$(MSVCDIR)\bin" + copy vc71\boost_regex-vc71-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + copy vc71\boost_regex-vc71-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc71\boost_regex-vc71-mt-1_47.dll "$(MSVCDIR)\bin" + copy vc71\libboost_regex-vc71-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc71\libboost_regex-vc71-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc71\libboost_regex-vc71-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc71\$(NULL)" mkdir vc71 + + +######################################################## +# +# section for libboost_regex-vc71-s-1_47.lib +# +######################################################## +vc71/libboost_regex-vc71-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/c_regex_traits.cpp + +vc71/libboost_regex-vc71-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71/libboost_regex-vc71-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/cregex.cpp + +vc71/libboost_regex-vc71-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/fileiter.cpp + +vc71/libboost_regex-vc71-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/icu.cpp + +vc71/libboost_regex-vc71-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/instances.cpp + +vc71/libboost_regex-vc71-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/posix_api.cpp + +vc71/libboost_regex-vc71-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/regex.cpp + +vc71/libboost_regex-vc71-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/regex_debug.cpp + +vc71/libboost_regex-vc71-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71/libboost_regex-vc71-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71/libboost_regex-vc71-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/static_mutex.cpp + +vc71/libboost_regex-vc71-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/usinstances.cpp + +vc71/libboost_regex-vc71-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc71/libboost_regex-vc71-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc71/libboost_regex-vc71-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/wide_posix_api.cpp + +vc71/libboost_regex-vc71-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-s-1_47/ -Fdvc71/libboost_regex-vc71-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-s-1_47_dir : + @if not exist "vc71\libboost_regex-vc71-s-1_47\$(NULL)" mkdir vc71\libboost_regex-vc71-s-1_47 + +libboost_regex-vc71-s-1_47_clean : + del vc71\libboost_regex-vc71-s-1_47\*.obj + del vc71\libboost_regex-vc71-s-1_47\*.idb + del vc71\libboost_regex-vc71-s-1_47\*.exp + del vc71\libboost_regex-vc71-s-1_47\*.pch + +./vc71/libboost_regex-vc71-s-1_47.lib : vc71/libboost_regex-vc71-s-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-s-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-s-1_47/cregex.obj vc71/libboost_regex-vc71-s-1_47/fileiter.obj vc71/libboost_regex-vc71-s-1_47/icu.obj vc71/libboost_regex-vc71-s-1_47/instances.obj vc71/libboost_regex-vc71-s-1_47/posix_api.obj vc71/libboost_regex-vc71-s-1_47/regex.obj vc71/libboost_regex-vc71-s-1_47/regex_debug.obj vc71/libboost_regex-vc71-s-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-s-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-s-1_47/static_mutex.obj vc71/libboost_regex-vc71-s-1_47/usinstances.obj vc71/libboost_regex-vc71-s-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-s-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-s-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-s-1_47/winstances.obj + link -lib /nologo /out:vc71/libboost_regex-vc71-s-1_47.lib $(XSFLAGS) vc71/libboost_regex-vc71-s-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-s-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-s-1_47/cregex.obj vc71/libboost_regex-vc71-s-1_47/fileiter.obj vc71/libboost_regex-vc71-s-1_47/icu.obj vc71/libboost_regex-vc71-s-1_47/instances.obj vc71/libboost_regex-vc71-s-1_47/posix_api.obj vc71/libboost_regex-vc71-s-1_47/regex.obj vc71/libboost_regex-vc71-s-1_47/regex_debug.obj vc71/libboost_regex-vc71-s-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-s-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-s-1_47/static_mutex.obj vc71/libboost_regex-vc71-s-1_47/usinstances.obj vc71/libboost_regex-vc71-s-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-s-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-s-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc71-mt-s-1_47.lib +# +######################################################## +vc71/libboost_regex-vc71-mt-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/c_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/cregex.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/fileiter.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/icu.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/instances.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/posix_api.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/regex.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/regex_debug.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/static_mutex.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/usinstances.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/wide_posix_api.cpp + +vc71/libboost_regex-vc71-mt-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /GX /O2 /GB /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-s-1_47/ -Fdvc71/libboost_regex-vc71-mt-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-mt-s-1_47_dir : + @if not exist "vc71\libboost_regex-vc71-mt-s-1_47\$(NULL)" mkdir vc71\libboost_regex-vc71-mt-s-1_47 + +libboost_regex-vc71-mt-s-1_47_clean : + del vc71\libboost_regex-vc71-mt-s-1_47\*.obj + del vc71\libboost_regex-vc71-mt-s-1_47\*.idb + del vc71\libboost_regex-vc71-mt-s-1_47\*.exp + del vc71\libboost_regex-vc71-mt-s-1_47\*.pch + +./vc71/libboost_regex-vc71-mt-s-1_47.lib : vc71/libboost_regex-vc71-mt-s-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-mt-s-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-mt-s-1_47/cregex.obj vc71/libboost_regex-vc71-mt-s-1_47/fileiter.obj vc71/libboost_regex-vc71-mt-s-1_47/icu.obj vc71/libboost_regex-vc71-mt-s-1_47/instances.obj vc71/libboost_regex-vc71-mt-s-1_47/posix_api.obj vc71/libboost_regex-vc71-mt-s-1_47/regex.obj vc71/libboost_regex-vc71-mt-s-1_47/regex_debug.obj vc71/libboost_regex-vc71-mt-s-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-mt-s-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-mt-s-1_47/static_mutex.obj vc71/libboost_regex-vc71-mt-s-1_47/usinstances.obj vc71/libboost_regex-vc71-mt-s-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-mt-s-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-mt-s-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-mt-s-1_47/winstances.obj + link -lib /nologo /out:vc71/libboost_regex-vc71-mt-s-1_47.lib $(XSFLAGS) vc71/libboost_regex-vc71-mt-s-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-mt-s-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-mt-s-1_47/cregex.obj vc71/libboost_regex-vc71-mt-s-1_47/fileiter.obj vc71/libboost_regex-vc71-mt-s-1_47/icu.obj vc71/libboost_regex-vc71-mt-s-1_47/instances.obj vc71/libboost_regex-vc71-mt-s-1_47/posix_api.obj vc71/libboost_regex-vc71-mt-s-1_47/regex.obj vc71/libboost_regex-vc71-mt-s-1_47/regex_debug.obj vc71/libboost_regex-vc71-mt-s-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-mt-s-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-mt-s-1_47/static_mutex.obj vc71/libboost_regex-vc71-mt-s-1_47/usinstances.obj vc71/libboost_regex-vc71-mt-s-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-mt-s-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-mt-s-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-mt-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc71-sgd-1_47.lib +# +######################################################## +vc71/libboost_regex-vc71-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc71/libboost_regex-vc71-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71/libboost_regex-vc71-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/cregex.cpp + +vc71/libboost_regex-vc71-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/fileiter.cpp + +vc71/libboost_regex-vc71-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/icu.cpp + +vc71/libboost_regex-vc71-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/instances.cpp + +vc71/libboost_regex-vc71-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/posix_api.cpp + +vc71/libboost_regex-vc71-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/regex.cpp + +vc71/libboost_regex-vc71-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/regex_debug.cpp + +vc71/libboost_regex-vc71-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71/libboost_regex-vc71-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71/libboost_regex-vc71-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/static_mutex.cpp + +vc71/libboost_regex-vc71-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/usinstances.cpp + +vc71/libboost_regex-vc71-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc71/libboost_regex-vc71-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc71/libboost_regex-vc71-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc71/libboost_regex-vc71-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-sgd-1_47/ -Fdvc71/libboost_regex-vc71-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-sgd-1_47_dir : + @if not exist "vc71\libboost_regex-vc71-sgd-1_47\$(NULL)" mkdir vc71\libboost_regex-vc71-sgd-1_47 + +libboost_regex-vc71-sgd-1_47_clean : + del vc71\libboost_regex-vc71-sgd-1_47\*.obj + del vc71\libboost_regex-vc71-sgd-1_47\*.idb + del vc71\libboost_regex-vc71-sgd-1_47\*.exp + del vc71\libboost_regex-vc71-sgd-1_47\*.pch + +./vc71/libboost_regex-vc71-sgd-1_47.lib : vc71/libboost_regex-vc71-sgd-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-sgd-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-sgd-1_47/cregex.obj vc71/libboost_regex-vc71-sgd-1_47/fileiter.obj vc71/libboost_regex-vc71-sgd-1_47/icu.obj vc71/libboost_regex-vc71-sgd-1_47/instances.obj vc71/libboost_regex-vc71-sgd-1_47/posix_api.obj vc71/libboost_regex-vc71-sgd-1_47/regex.obj vc71/libboost_regex-vc71-sgd-1_47/regex_debug.obj vc71/libboost_regex-vc71-sgd-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-sgd-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-sgd-1_47/static_mutex.obj vc71/libboost_regex-vc71-sgd-1_47/usinstances.obj vc71/libboost_regex-vc71-sgd-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-sgd-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-sgd-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-sgd-1_47/winstances.obj + link -lib /nologo /out:vc71/libboost_regex-vc71-sgd-1_47.lib $(XSFLAGS) vc71/libboost_regex-vc71-sgd-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-sgd-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-sgd-1_47/cregex.obj vc71/libboost_regex-vc71-sgd-1_47/fileiter.obj vc71/libboost_regex-vc71-sgd-1_47/icu.obj vc71/libboost_regex-vc71-sgd-1_47/instances.obj vc71/libboost_regex-vc71-sgd-1_47/posix_api.obj vc71/libboost_regex-vc71-sgd-1_47/regex.obj vc71/libboost_regex-vc71-sgd-1_47/regex_debug.obj vc71/libboost_regex-vc71-sgd-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-sgd-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-sgd-1_47/static_mutex.obj vc71/libboost_regex-vc71-sgd-1_47/usinstances.obj vc71/libboost_regex-vc71-sgd-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-sgd-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-sgd-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-sgd-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc71-mt-sgd-1_47.lib +# +######################################################## +vc71/libboost_regex-vc71-mt-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/cregex.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/fileiter.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/icu.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/instances.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/posix_api.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/regex.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/regex_debug.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/static_mutex.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/usinstances.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc71/libboost_regex-vc71-mt-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /GX /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-sgd-1_47/ -Fdvc71/libboost_regex-vc71-mt-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-mt-sgd-1_47_dir : + @if not exist "vc71\libboost_regex-vc71-mt-sgd-1_47\$(NULL)" mkdir vc71\libboost_regex-vc71-mt-sgd-1_47 + +libboost_regex-vc71-mt-sgd-1_47_clean : + del vc71\libboost_regex-vc71-mt-sgd-1_47\*.obj + del vc71\libboost_regex-vc71-mt-sgd-1_47\*.idb + del vc71\libboost_regex-vc71-mt-sgd-1_47\*.exp + del vc71\libboost_regex-vc71-mt-sgd-1_47\*.pch + +./vc71/libboost_regex-vc71-mt-sgd-1_47.lib : vc71/libboost_regex-vc71-mt-sgd-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-mt-sgd-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-mt-sgd-1_47/cregex.obj vc71/libboost_regex-vc71-mt-sgd-1_47/fileiter.obj vc71/libboost_regex-vc71-mt-sgd-1_47/icu.obj vc71/libboost_regex-vc71-mt-sgd-1_47/instances.obj vc71/libboost_regex-vc71-mt-sgd-1_47/posix_api.obj vc71/libboost_regex-vc71-mt-sgd-1_47/regex.obj vc71/libboost_regex-vc71-mt-sgd-1_47/regex_debug.obj vc71/libboost_regex-vc71-mt-sgd-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-mt-sgd-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-mt-sgd-1_47/static_mutex.obj vc71/libboost_regex-vc71-mt-sgd-1_47/usinstances.obj vc71/libboost_regex-vc71-mt-sgd-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-mt-sgd-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-mt-sgd-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-mt-sgd-1_47/winstances.obj + link -lib /nologo /out:vc71/libboost_regex-vc71-mt-sgd-1_47.lib $(XSFLAGS) vc71/libboost_regex-vc71-mt-sgd-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-mt-sgd-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-mt-sgd-1_47/cregex.obj vc71/libboost_regex-vc71-mt-sgd-1_47/fileiter.obj vc71/libboost_regex-vc71-mt-sgd-1_47/icu.obj vc71/libboost_regex-vc71-mt-sgd-1_47/instances.obj vc71/libboost_regex-vc71-mt-sgd-1_47/posix_api.obj vc71/libboost_regex-vc71-mt-sgd-1_47/regex.obj vc71/libboost_regex-vc71-mt-sgd-1_47/regex_debug.obj vc71/libboost_regex-vc71-mt-sgd-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-mt-sgd-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-mt-sgd-1_47/static_mutex.obj vc71/libboost_regex-vc71-mt-sgd-1_47/usinstances.obj vc71/libboost_regex-vc71-mt-sgd-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-mt-sgd-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-mt-sgd-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-mt-sgd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc71-mt-gd-1_47.lib +# +######################################################## +vc71/boost_regex-vc71-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/cregex.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/icu.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/instances.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/regex.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc71/boost_regex-vc71-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-gd-1_47/ -Fdvc71/boost_regex-vc71-mt-gd-1_47.pdb ../src/winstances.cpp + +boost_regex-vc71-mt-gd-1_47_dir : + @if not exist "vc71\boost_regex-vc71-mt-gd-1_47\$(NULL)" mkdir vc71\boost_regex-vc71-mt-gd-1_47 + +boost_regex-vc71-mt-gd-1_47_clean : + del vc71\boost_regex-vc71-mt-gd-1_47\*.obj + del vc71\boost_regex-vc71-mt-gd-1_47\*.idb + del vc71\boost_regex-vc71-mt-gd-1_47\*.exp + del vc71\boost_regex-vc71-mt-gd-1_47\*.pch + +./vc71/boost_regex-vc71-mt-gd-1_47.lib : vc71/boost_regex-vc71-mt-gd-1_47/c_regex_traits.obj vc71/boost_regex-vc71-mt-gd-1_47/cpp_regex_traits.obj vc71/boost_regex-vc71-mt-gd-1_47/cregex.obj vc71/boost_regex-vc71-mt-gd-1_47/fileiter.obj vc71/boost_regex-vc71-mt-gd-1_47/icu.obj vc71/boost_regex-vc71-mt-gd-1_47/instances.obj vc71/boost_regex-vc71-mt-gd-1_47/posix_api.obj vc71/boost_regex-vc71-mt-gd-1_47/regex.obj vc71/boost_regex-vc71-mt-gd-1_47/regex_debug.obj vc71/boost_regex-vc71-mt-gd-1_47/regex_raw_buffer.obj vc71/boost_regex-vc71-mt-gd-1_47/regex_traits_defaults.obj vc71/boost_regex-vc71-mt-gd-1_47/static_mutex.obj vc71/boost_regex-vc71-mt-gd-1_47/usinstances.obj vc71/boost_regex-vc71-mt-gd-1_47/w32_regex_traits.obj vc71/boost_regex-vc71-mt-gd-1_47/wc_regex_traits.obj vc71/boost_regex-vc71-mt-gd-1_47/wide_posix_api.obj vc71/boost_regex-vc71-mt-gd-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc71/boost_regex-vc71-mt-gd-1_47.pdb" /debug /machine:I386 /out:"vc71/boost_regex-vc71-mt-gd-1_47.dll" /implib:"vc71/boost_regex-vc71-mt-gd-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc71/boost_regex-vc71-mt-gd-1_47/c_regex_traits.obj vc71/boost_regex-vc71-mt-gd-1_47/cpp_regex_traits.obj vc71/boost_regex-vc71-mt-gd-1_47/cregex.obj vc71/boost_regex-vc71-mt-gd-1_47/fileiter.obj vc71/boost_regex-vc71-mt-gd-1_47/icu.obj vc71/boost_regex-vc71-mt-gd-1_47/instances.obj vc71/boost_regex-vc71-mt-gd-1_47/posix_api.obj vc71/boost_regex-vc71-mt-gd-1_47/regex.obj vc71/boost_regex-vc71-mt-gd-1_47/regex_debug.obj vc71/boost_regex-vc71-mt-gd-1_47/regex_raw_buffer.obj vc71/boost_regex-vc71-mt-gd-1_47/regex_traits_defaults.obj vc71/boost_regex-vc71-mt-gd-1_47/static_mutex.obj vc71/boost_regex-vc71-mt-gd-1_47/usinstances.obj vc71/boost_regex-vc71-mt-gd-1_47/w32_regex_traits.obj vc71/boost_regex-vc71-mt-gd-1_47/wc_regex_traits.obj vc71/boost_regex-vc71-mt-gd-1_47/wide_posix_api.obj vc71/boost_regex-vc71-mt-gd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc71-mt-1_47.lib +# +######################################################## +vc71/boost_regex-vc71-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc71/boost_regex-vc71-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71/boost_regex-vc71-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/cregex.cpp + +vc71/boost_regex-vc71-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/fileiter.cpp + +vc71/boost_regex-vc71-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/icu.cpp + +vc71/boost_regex-vc71-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/instances.cpp + +vc71/boost_regex-vc71-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/posix_api.cpp + +vc71/boost_regex-vc71-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/regex.cpp + +vc71/boost_regex-vc71-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/regex_debug.cpp + +vc71/boost_regex-vc71-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71/boost_regex-vc71-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71/boost_regex-vc71-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/static_mutex.cpp + +vc71/boost_regex-vc71-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/usinstances.cpp + +vc71/boost_regex-vc71-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc71/boost_regex-vc71-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc71/boost_regex-vc71-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc71/boost_regex-vc71-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/boost_regex-vc71-mt-1_47/ -Fdvc71/boost_regex-vc71-mt-1_47.pdb ../src/winstances.cpp + +boost_regex-vc71-mt-1_47_dir : + @if not exist "vc71\boost_regex-vc71-mt-1_47\$(NULL)" mkdir vc71\boost_regex-vc71-mt-1_47 + +boost_regex-vc71-mt-1_47_clean : + del vc71\boost_regex-vc71-mt-1_47\*.obj + del vc71\boost_regex-vc71-mt-1_47\*.idb + del vc71\boost_regex-vc71-mt-1_47\*.exp + del vc71\boost_regex-vc71-mt-1_47\*.pch + +./vc71/boost_regex-vc71-mt-1_47.lib : vc71/boost_regex-vc71-mt-1_47/c_regex_traits.obj vc71/boost_regex-vc71-mt-1_47/cpp_regex_traits.obj vc71/boost_regex-vc71-mt-1_47/cregex.obj vc71/boost_regex-vc71-mt-1_47/fileiter.obj vc71/boost_regex-vc71-mt-1_47/icu.obj vc71/boost_regex-vc71-mt-1_47/instances.obj vc71/boost_regex-vc71-mt-1_47/posix_api.obj vc71/boost_regex-vc71-mt-1_47/regex.obj vc71/boost_regex-vc71-mt-1_47/regex_debug.obj vc71/boost_regex-vc71-mt-1_47/regex_raw_buffer.obj vc71/boost_regex-vc71-mt-1_47/regex_traits_defaults.obj vc71/boost_regex-vc71-mt-1_47/static_mutex.obj vc71/boost_regex-vc71-mt-1_47/usinstances.obj vc71/boost_regex-vc71-mt-1_47/w32_regex_traits.obj vc71/boost_regex-vc71-mt-1_47/wc_regex_traits.obj vc71/boost_regex-vc71-mt-1_47/wide_posix_api.obj vc71/boost_regex-vc71-mt-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc71/boost_regex-vc71-mt-1_47.pdb" /debug /machine:I386 /out:"vc71/boost_regex-vc71-mt-1_47.dll" /implib:"vc71/boost_regex-vc71-mt-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc71/boost_regex-vc71-mt-1_47/c_regex_traits.obj vc71/boost_regex-vc71-mt-1_47/cpp_regex_traits.obj vc71/boost_regex-vc71-mt-1_47/cregex.obj vc71/boost_regex-vc71-mt-1_47/fileiter.obj vc71/boost_regex-vc71-mt-1_47/icu.obj vc71/boost_regex-vc71-mt-1_47/instances.obj vc71/boost_regex-vc71-mt-1_47/posix_api.obj vc71/boost_regex-vc71-mt-1_47/regex.obj vc71/boost_regex-vc71-mt-1_47/regex_debug.obj vc71/boost_regex-vc71-mt-1_47/regex_raw_buffer.obj vc71/boost_regex-vc71-mt-1_47/regex_traits_defaults.obj vc71/boost_regex-vc71-mt-1_47/static_mutex.obj vc71/boost_regex-vc71-mt-1_47/usinstances.obj vc71/boost_regex-vc71-mt-1_47/w32_regex_traits.obj vc71/boost_regex-vc71-mt-1_47/wc_regex_traits.obj vc71/boost_regex-vc71-mt-1_47/wide_posix_api.obj vc71/boost_regex-vc71-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc71-mt-1_47.lib +# +######################################################## +vc71/libboost_regex-vc71-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/cregex.cpp + +vc71/libboost_regex-vc71-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/fileiter.cpp + +vc71/libboost_regex-vc71-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/icu.cpp + +vc71/libboost_regex-vc71-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/instances.cpp + +vc71/libboost_regex-vc71-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/posix_api.cpp + +vc71/libboost_regex-vc71-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/regex.cpp + +vc71/libboost_regex-vc71-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/regex_debug.cpp + +vc71/libboost_regex-vc71-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71/libboost_regex-vc71-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71/libboost_regex-vc71-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/static_mutex.cpp + +vc71/libboost_regex-vc71-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/usinstances.cpp + +vc71/libboost_regex-vc71-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc71/libboost_regex-vc71-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /GX /O2 /GB /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-1_47/ -Fdvc71/libboost_regex-vc71-mt-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-mt-1_47_dir : + @if not exist "vc71\libboost_regex-vc71-mt-1_47\$(NULL)" mkdir vc71\libboost_regex-vc71-mt-1_47 + +libboost_regex-vc71-mt-1_47_clean : + del vc71\libboost_regex-vc71-mt-1_47\*.obj + del vc71\libboost_regex-vc71-mt-1_47\*.idb + del vc71\libboost_regex-vc71-mt-1_47\*.exp + del vc71\libboost_regex-vc71-mt-1_47\*.pch + +./vc71/libboost_regex-vc71-mt-1_47.lib : vc71/libboost_regex-vc71-mt-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-mt-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-mt-1_47/cregex.obj vc71/libboost_regex-vc71-mt-1_47/fileiter.obj vc71/libboost_regex-vc71-mt-1_47/icu.obj vc71/libboost_regex-vc71-mt-1_47/instances.obj vc71/libboost_regex-vc71-mt-1_47/posix_api.obj vc71/libboost_regex-vc71-mt-1_47/regex.obj vc71/libboost_regex-vc71-mt-1_47/regex_debug.obj vc71/libboost_regex-vc71-mt-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-mt-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-mt-1_47/static_mutex.obj vc71/libboost_regex-vc71-mt-1_47/usinstances.obj vc71/libboost_regex-vc71-mt-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-mt-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-mt-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-mt-1_47/winstances.obj + link -lib /nologo /out:vc71/libboost_regex-vc71-mt-1_47.lib $(XSFLAGS) vc71/libboost_regex-vc71-mt-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-mt-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-mt-1_47/cregex.obj vc71/libboost_regex-vc71-mt-1_47/fileiter.obj vc71/libboost_regex-vc71-mt-1_47/icu.obj vc71/libboost_regex-vc71-mt-1_47/instances.obj vc71/libboost_regex-vc71-mt-1_47/posix_api.obj vc71/libboost_regex-vc71-mt-1_47/regex.obj vc71/libboost_regex-vc71-mt-1_47/regex_debug.obj vc71/libboost_regex-vc71-mt-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-mt-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-mt-1_47/static_mutex.obj vc71/libboost_regex-vc71-mt-1_47/usinstances.obj vc71/libboost_regex-vc71-mt-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-mt-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-mt-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc71-mt-gd-1_47.lib +# +######################################################## +vc71/libboost_regex-vc71-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/cregex.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/icu.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/instances.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/regex.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc71/libboost_regex-vc71-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /GX /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /GX /RTC1 /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc71/libboost_regex-vc71-mt-gd-1_47/ -Fdvc71/libboost_regex-vc71-mt-gd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc71-mt-gd-1_47_dir : + @if not exist "vc71\libboost_regex-vc71-mt-gd-1_47\$(NULL)" mkdir vc71\libboost_regex-vc71-mt-gd-1_47 + +libboost_regex-vc71-mt-gd-1_47_clean : + del vc71\libboost_regex-vc71-mt-gd-1_47\*.obj + del vc71\libboost_regex-vc71-mt-gd-1_47\*.idb + del vc71\libboost_regex-vc71-mt-gd-1_47\*.exp + del vc71\libboost_regex-vc71-mt-gd-1_47\*.pch + +./vc71/libboost_regex-vc71-mt-gd-1_47.lib : vc71/libboost_regex-vc71-mt-gd-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-mt-gd-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-mt-gd-1_47/cregex.obj vc71/libboost_regex-vc71-mt-gd-1_47/fileiter.obj vc71/libboost_regex-vc71-mt-gd-1_47/icu.obj vc71/libboost_regex-vc71-mt-gd-1_47/instances.obj vc71/libboost_regex-vc71-mt-gd-1_47/posix_api.obj vc71/libboost_regex-vc71-mt-gd-1_47/regex.obj vc71/libboost_regex-vc71-mt-gd-1_47/regex_debug.obj vc71/libboost_regex-vc71-mt-gd-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-mt-gd-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-mt-gd-1_47/static_mutex.obj vc71/libboost_regex-vc71-mt-gd-1_47/usinstances.obj vc71/libboost_regex-vc71-mt-gd-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-mt-gd-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-mt-gd-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-mt-gd-1_47/winstances.obj + link -lib /nologo /out:vc71/libboost_regex-vc71-mt-gd-1_47.lib $(XSFLAGS) vc71/libboost_regex-vc71-mt-gd-1_47/c_regex_traits.obj vc71/libboost_regex-vc71-mt-gd-1_47/cpp_regex_traits.obj vc71/libboost_regex-vc71-mt-gd-1_47/cregex.obj vc71/libboost_regex-vc71-mt-gd-1_47/fileiter.obj vc71/libboost_regex-vc71-mt-gd-1_47/icu.obj vc71/libboost_regex-vc71-mt-gd-1_47/instances.obj vc71/libboost_regex-vc71-mt-gd-1_47/posix_api.obj vc71/libboost_regex-vc71-mt-gd-1_47/regex.obj vc71/libboost_regex-vc71-mt-gd-1_47/regex_debug.obj vc71/libboost_regex-vc71-mt-gd-1_47/regex_raw_buffer.obj vc71/libboost_regex-vc71-mt-gd-1_47/regex_traits_defaults.obj vc71/libboost_regex-vc71-mt-gd-1_47/static_mutex.obj vc71/libboost_regex-vc71-mt-gd-1_47/usinstances.obj vc71/libboost_regex-vc71-mt-gd-1_47/w32_regex_traits.obj vc71/libboost_regex-vc71-mt-gd-1_47/wc_regex_traits.obj vc71/libboost_regex-vc71-mt-gd-1_47/wide_posix_api.obj vc71/libboost_regex-vc71-mt-gd-1_47/winstances.obj + diff --git a/libs/regex/build/vc8.mak b/libs/regex/build/vc8.mak new file mode 100644 index 0000000000..61f38f8aba --- /dev/null +++ b/libs/regex/build/vc8.mak @@ -0,0 +1,632 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for MSVC compiler +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# path to ICU library installation goes here: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" +MSVCDIR=$(VS80COMNTOOLS)..\..\VC +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc80-s-1_47_dir ./vc80/libboost_regex-vc80-s-1_47.lib libboost_regex-vc80-mt-s-1_47_dir ./vc80/libboost_regex-vc80-mt-s-1_47.lib libboost_regex-vc80-sgd-1_47_dir ./vc80/libboost_regex-vc80-sgd-1_47.lib libboost_regex-vc80-mt-sgd-1_47_dir ./vc80/libboost_regex-vc80-mt-sgd-1_47.lib boost_regex-vc80-mt-gd-1_47_dir ./vc80/boost_regex-vc80-mt-gd-1_47.lib boost_regex-vc80-mt-1_47_dir ./vc80/boost_regex-vc80-mt-1_47.lib libboost_regex-vc80-mt-1_47_dir ./vc80/libboost_regex-vc80-mt-1_47.lib libboost_regex-vc80-mt-gd-1_47_dir ./vc80/libboost_regex-vc80-mt-gd-1_47.lib + +clean : libboost_regex-vc80-s-1_47_clean libboost_regex-vc80-mt-s-1_47_clean libboost_regex-vc80-sgd-1_47_clean libboost_regex-vc80-mt-sgd-1_47_clean boost_regex-vc80-mt-gd-1_47_clean boost_regex-vc80-mt-1_47_clean libboost_regex-vc80-mt-1_47_clean libboost_regex-vc80-mt-gd-1_47_clean + +install : all + copy vc80\libboost_regex-vc80-s-1_47.lib "$(MSVCDIR)\lib" + copy vc80\libboost_regex-vc80-mt-s-1_47.lib "$(MSVCDIR)\lib" + copy vc80\libboost_regex-vc80-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc80\libboost_regex-vc80-sgd-1_47.pdb "$(MSVCDIR)\lib" + copy vc80\libboost_regex-vc80-mt-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc80\libboost_regex-vc80-mt-sgd-1_47.pdb "$(MSVCDIR)\lib" + copy vc80\boost_regex-vc80-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc80\boost_regex-vc80-mt-gd-1_47.dll "$(MSVCDIR)\bin" + copy vc80\boost_regex-vc80-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + copy vc80\boost_regex-vc80-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc80\boost_regex-vc80-mt-1_47.dll "$(MSVCDIR)\bin" + copy vc80\libboost_regex-vc80-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc80\libboost_regex-vc80-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc80\libboost_regex-vc80-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc80\$(NULL)" mkdir vc80 + + +######################################################## +# +# section for libboost_regex-vc80-s-1_47.lib +# +######################################################## +vc80/libboost_regex-vc80-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/c_regex_traits.cpp + +vc80/libboost_regex-vc80-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc80/libboost_regex-vc80-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/cregex.cpp + +vc80/libboost_regex-vc80-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/fileiter.cpp + +vc80/libboost_regex-vc80-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/icu.cpp + +vc80/libboost_regex-vc80-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/instances.cpp + +vc80/libboost_regex-vc80-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/posix_api.cpp + +vc80/libboost_regex-vc80-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/regex.cpp + +vc80/libboost_regex-vc80-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/regex_debug.cpp + +vc80/libboost_regex-vc80-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc80/libboost_regex-vc80-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc80/libboost_regex-vc80-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/static_mutex.cpp + +vc80/libboost_regex-vc80-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/usinstances.cpp + +vc80/libboost_regex-vc80-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc80/libboost_regex-vc80-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc80/libboost_regex-vc80-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/wide_posix_api.cpp + +vc80/libboost_regex-vc80-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /c /nologo /ML /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-s-1_47/ -Fdvc80/libboost_regex-vc80-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc80-s-1_47_dir : + @if not exist "vc80\libboost_regex-vc80-s-1_47\$(NULL)" mkdir vc80\libboost_regex-vc80-s-1_47 + +libboost_regex-vc80-s-1_47_clean : + del vc80\libboost_regex-vc80-s-1_47\*.obj + del vc80\libboost_regex-vc80-s-1_47\*.idb + del vc80\libboost_regex-vc80-s-1_47\*.exp + del vc80\libboost_regex-vc80-s-1_47\*.pch + +./vc80/libboost_regex-vc80-s-1_47.lib : vc80/libboost_regex-vc80-s-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-s-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-s-1_47/cregex.obj vc80/libboost_regex-vc80-s-1_47/fileiter.obj vc80/libboost_regex-vc80-s-1_47/icu.obj vc80/libboost_regex-vc80-s-1_47/instances.obj vc80/libboost_regex-vc80-s-1_47/posix_api.obj vc80/libboost_regex-vc80-s-1_47/regex.obj vc80/libboost_regex-vc80-s-1_47/regex_debug.obj vc80/libboost_regex-vc80-s-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-s-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-s-1_47/static_mutex.obj vc80/libboost_regex-vc80-s-1_47/usinstances.obj vc80/libboost_regex-vc80-s-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-s-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-s-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-s-1_47/winstances.obj + link -lib /nologo /out:vc80/libboost_regex-vc80-s-1_47.lib $(XSFLAGS) vc80/libboost_regex-vc80-s-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-s-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-s-1_47/cregex.obj vc80/libboost_regex-vc80-s-1_47/fileiter.obj vc80/libboost_regex-vc80-s-1_47/icu.obj vc80/libboost_regex-vc80-s-1_47/instances.obj vc80/libboost_regex-vc80-s-1_47/posix_api.obj vc80/libboost_regex-vc80-s-1_47/regex.obj vc80/libboost_regex-vc80-s-1_47/regex_debug.obj vc80/libboost_regex-vc80-s-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-s-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-s-1_47/static_mutex.obj vc80/libboost_regex-vc80-s-1_47/usinstances.obj vc80/libboost_regex-vc80-s-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-s-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-s-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc80-mt-s-1_47.lib +# +######################################################## +vc80/libboost_regex-vc80-mt-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/c_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/cregex.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/fileiter.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/icu.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/instances.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/posix_api.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/regex.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/regex_debug.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/static_mutex.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/usinstances.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/wide_posix_api.cpp + +vc80/libboost_regex-vc80-mt-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-s-1_47/ -Fdvc80/libboost_regex-vc80-mt-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc80-mt-s-1_47_dir : + @if not exist "vc80\libboost_regex-vc80-mt-s-1_47\$(NULL)" mkdir vc80\libboost_regex-vc80-mt-s-1_47 + +libboost_regex-vc80-mt-s-1_47_clean : + del vc80\libboost_regex-vc80-mt-s-1_47\*.obj + del vc80\libboost_regex-vc80-mt-s-1_47\*.idb + del vc80\libboost_regex-vc80-mt-s-1_47\*.exp + del vc80\libboost_regex-vc80-mt-s-1_47\*.pch + +./vc80/libboost_regex-vc80-mt-s-1_47.lib : vc80/libboost_regex-vc80-mt-s-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-mt-s-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-mt-s-1_47/cregex.obj vc80/libboost_regex-vc80-mt-s-1_47/fileiter.obj vc80/libboost_regex-vc80-mt-s-1_47/icu.obj vc80/libboost_regex-vc80-mt-s-1_47/instances.obj vc80/libboost_regex-vc80-mt-s-1_47/posix_api.obj vc80/libboost_regex-vc80-mt-s-1_47/regex.obj vc80/libboost_regex-vc80-mt-s-1_47/regex_debug.obj vc80/libboost_regex-vc80-mt-s-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-mt-s-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-mt-s-1_47/static_mutex.obj vc80/libboost_regex-vc80-mt-s-1_47/usinstances.obj vc80/libboost_regex-vc80-mt-s-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-mt-s-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-mt-s-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-mt-s-1_47/winstances.obj + link -lib /nologo /out:vc80/libboost_regex-vc80-mt-s-1_47.lib $(XSFLAGS) vc80/libboost_regex-vc80-mt-s-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-mt-s-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-mt-s-1_47/cregex.obj vc80/libboost_regex-vc80-mt-s-1_47/fileiter.obj vc80/libboost_regex-vc80-mt-s-1_47/icu.obj vc80/libboost_regex-vc80-mt-s-1_47/instances.obj vc80/libboost_regex-vc80-mt-s-1_47/posix_api.obj vc80/libboost_regex-vc80-mt-s-1_47/regex.obj vc80/libboost_regex-vc80-mt-s-1_47/regex_debug.obj vc80/libboost_regex-vc80-mt-s-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-mt-s-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-mt-s-1_47/static_mutex.obj vc80/libboost_regex-vc80-mt-s-1_47/usinstances.obj vc80/libboost_regex-vc80-mt-s-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-mt-s-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-mt-s-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-mt-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc80-sgd-1_47.lib +# +######################################################## +vc80/libboost_regex-vc80-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc80/libboost_regex-vc80-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc80/libboost_regex-vc80-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/cregex.cpp + +vc80/libboost_regex-vc80-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/fileiter.cpp + +vc80/libboost_regex-vc80-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/icu.cpp + +vc80/libboost_regex-vc80-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/instances.cpp + +vc80/libboost_regex-vc80-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/posix_api.cpp + +vc80/libboost_regex-vc80-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/regex.cpp + +vc80/libboost_regex-vc80-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/regex_debug.cpp + +vc80/libboost_regex-vc80-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc80/libboost_regex-vc80-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc80/libboost_regex-vc80-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/static_mutex.cpp + +vc80/libboost_regex-vc80-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/usinstances.cpp + +vc80/libboost_regex-vc80-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc80/libboost_regex-vc80-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc80/libboost_regex-vc80-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc80/libboost_regex-vc80-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MLd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-sgd-1_47/ -Fdvc80/libboost_regex-vc80-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc80-sgd-1_47_dir : + @if not exist "vc80\libboost_regex-vc80-sgd-1_47\$(NULL)" mkdir vc80\libboost_regex-vc80-sgd-1_47 + +libboost_regex-vc80-sgd-1_47_clean : + del vc80\libboost_regex-vc80-sgd-1_47\*.obj + del vc80\libboost_regex-vc80-sgd-1_47\*.idb + del vc80\libboost_regex-vc80-sgd-1_47\*.exp + del vc80\libboost_regex-vc80-sgd-1_47\*.pch + +./vc80/libboost_regex-vc80-sgd-1_47.lib : vc80/libboost_regex-vc80-sgd-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-sgd-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-sgd-1_47/cregex.obj vc80/libboost_regex-vc80-sgd-1_47/fileiter.obj vc80/libboost_regex-vc80-sgd-1_47/icu.obj vc80/libboost_regex-vc80-sgd-1_47/instances.obj vc80/libboost_regex-vc80-sgd-1_47/posix_api.obj vc80/libboost_regex-vc80-sgd-1_47/regex.obj vc80/libboost_regex-vc80-sgd-1_47/regex_debug.obj vc80/libboost_regex-vc80-sgd-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-sgd-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-sgd-1_47/static_mutex.obj vc80/libboost_regex-vc80-sgd-1_47/usinstances.obj vc80/libboost_regex-vc80-sgd-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-sgd-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-sgd-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-sgd-1_47/winstances.obj + link -lib /nologo /out:vc80/libboost_regex-vc80-sgd-1_47.lib $(XSFLAGS) vc80/libboost_regex-vc80-sgd-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-sgd-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-sgd-1_47/cregex.obj vc80/libboost_regex-vc80-sgd-1_47/fileiter.obj vc80/libboost_regex-vc80-sgd-1_47/icu.obj vc80/libboost_regex-vc80-sgd-1_47/instances.obj vc80/libboost_regex-vc80-sgd-1_47/posix_api.obj vc80/libboost_regex-vc80-sgd-1_47/regex.obj vc80/libboost_regex-vc80-sgd-1_47/regex_debug.obj vc80/libboost_regex-vc80-sgd-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-sgd-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-sgd-1_47/static_mutex.obj vc80/libboost_regex-vc80-sgd-1_47/usinstances.obj vc80/libboost_regex-vc80-sgd-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-sgd-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-sgd-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-sgd-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc80-mt-sgd-1_47.lib +# +######################################################## +vc80/libboost_regex-vc80-mt-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/cregex.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/fileiter.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/icu.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/instances.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/posix_api.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/regex.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/regex_debug.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/static_mutex.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/usinstances.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc80/libboost_regex-vc80-mt-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-sgd-1_47/ -Fdvc80/libboost_regex-vc80-mt-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc80-mt-sgd-1_47_dir : + @if not exist "vc80\libboost_regex-vc80-mt-sgd-1_47\$(NULL)" mkdir vc80\libboost_regex-vc80-mt-sgd-1_47 + +libboost_regex-vc80-mt-sgd-1_47_clean : + del vc80\libboost_regex-vc80-mt-sgd-1_47\*.obj + del vc80\libboost_regex-vc80-mt-sgd-1_47\*.idb + del vc80\libboost_regex-vc80-mt-sgd-1_47\*.exp + del vc80\libboost_regex-vc80-mt-sgd-1_47\*.pch + +./vc80/libboost_regex-vc80-mt-sgd-1_47.lib : vc80/libboost_regex-vc80-mt-sgd-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-mt-sgd-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-mt-sgd-1_47/cregex.obj vc80/libboost_regex-vc80-mt-sgd-1_47/fileiter.obj vc80/libboost_regex-vc80-mt-sgd-1_47/icu.obj vc80/libboost_regex-vc80-mt-sgd-1_47/instances.obj vc80/libboost_regex-vc80-mt-sgd-1_47/posix_api.obj vc80/libboost_regex-vc80-mt-sgd-1_47/regex.obj vc80/libboost_regex-vc80-mt-sgd-1_47/regex_debug.obj vc80/libboost_regex-vc80-mt-sgd-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-mt-sgd-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-mt-sgd-1_47/static_mutex.obj vc80/libboost_regex-vc80-mt-sgd-1_47/usinstances.obj vc80/libboost_regex-vc80-mt-sgd-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-mt-sgd-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-mt-sgd-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-mt-sgd-1_47/winstances.obj + link -lib /nologo /out:vc80/libboost_regex-vc80-mt-sgd-1_47.lib $(XSFLAGS) vc80/libboost_regex-vc80-mt-sgd-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-mt-sgd-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-mt-sgd-1_47/cregex.obj vc80/libboost_regex-vc80-mt-sgd-1_47/fileiter.obj vc80/libboost_regex-vc80-mt-sgd-1_47/icu.obj vc80/libboost_regex-vc80-mt-sgd-1_47/instances.obj vc80/libboost_regex-vc80-mt-sgd-1_47/posix_api.obj vc80/libboost_regex-vc80-mt-sgd-1_47/regex.obj vc80/libboost_regex-vc80-mt-sgd-1_47/regex_debug.obj vc80/libboost_regex-vc80-mt-sgd-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-mt-sgd-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-mt-sgd-1_47/static_mutex.obj vc80/libboost_regex-vc80-mt-sgd-1_47/usinstances.obj vc80/libboost_regex-vc80-mt-sgd-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-mt-sgd-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-mt-sgd-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-mt-sgd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc80-mt-gd-1_47.lib +# +######################################################## +vc80/boost_regex-vc80-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/cregex.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/icu.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/instances.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/regex.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc80/boost_regex-vc80-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-gd-1_47/ -Fdvc80/boost_regex-vc80-mt-gd-1_47.pdb ../src/winstances.cpp + +boost_regex-vc80-mt-gd-1_47_dir : + @if not exist "vc80\boost_regex-vc80-mt-gd-1_47\$(NULL)" mkdir vc80\boost_regex-vc80-mt-gd-1_47 + +boost_regex-vc80-mt-gd-1_47_clean : + del vc80\boost_regex-vc80-mt-gd-1_47\*.obj + del vc80\boost_regex-vc80-mt-gd-1_47\*.idb + del vc80\boost_regex-vc80-mt-gd-1_47\*.exp + del vc80\boost_regex-vc80-mt-gd-1_47\*.pch + +./vc80/boost_regex-vc80-mt-gd-1_47.lib : vc80/boost_regex-vc80-mt-gd-1_47/c_regex_traits.obj vc80/boost_regex-vc80-mt-gd-1_47/cpp_regex_traits.obj vc80/boost_regex-vc80-mt-gd-1_47/cregex.obj vc80/boost_regex-vc80-mt-gd-1_47/fileiter.obj vc80/boost_regex-vc80-mt-gd-1_47/icu.obj vc80/boost_regex-vc80-mt-gd-1_47/instances.obj vc80/boost_regex-vc80-mt-gd-1_47/posix_api.obj vc80/boost_regex-vc80-mt-gd-1_47/regex.obj vc80/boost_regex-vc80-mt-gd-1_47/regex_debug.obj vc80/boost_regex-vc80-mt-gd-1_47/regex_raw_buffer.obj vc80/boost_regex-vc80-mt-gd-1_47/regex_traits_defaults.obj vc80/boost_regex-vc80-mt-gd-1_47/static_mutex.obj vc80/boost_regex-vc80-mt-gd-1_47/usinstances.obj vc80/boost_regex-vc80-mt-gd-1_47/w32_regex_traits.obj vc80/boost_regex-vc80-mt-gd-1_47/wc_regex_traits.obj vc80/boost_regex-vc80-mt-gd-1_47/wide_posix_api.obj vc80/boost_regex-vc80-mt-gd-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc80/boost_regex-vc80-mt-gd-1_47.pdb" /debug /machine:I386 /out:"vc80/boost_regex-vc80-mt-gd-1_47.dll" /implib:"vc80/boost_regex-vc80-mt-gd-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc80/boost_regex-vc80-mt-gd-1_47/c_regex_traits.obj vc80/boost_regex-vc80-mt-gd-1_47/cpp_regex_traits.obj vc80/boost_regex-vc80-mt-gd-1_47/cregex.obj vc80/boost_regex-vc80-mt-gd-1_47/fileiter.obj vc80/boost_regex-vc80-mt-gd-1_47/icu.obj vc80/boost_regex-vc80-mt-gd-1_47/instances.obj vc80/boost_regex-vc80-mt-gd-1_47/posix_api.obj vc80/boost_regex-vc80-mt-gd-1_47/regex.obj vc80/boost_regex-vc80-mt-gd-1_47/regex_debug.obj vc80/boost_regex-vc80-mt-gd-1_47/regex_raw_buffer.obj vc80/boost_regex-vc80-mt-gd-1_47/regex_traits_defaults.obj vc80/boost_regex-vc80-mt-gd-1_47/static_mutex.obj vc80/boost_regex-vc80-mt-gd-1_47/usinstances.obj vc80/boost_regex-vc80-mt-gd-1_47/w32_regex_traits.obj vc80/boost_regex-vc80-mt-gd-1_47/wc_regex_traits.obj vc80/boost_regex-vc80-mt-gd-1_47/wide_posix_api.obj vc80/boost_regex-vc80-mt-gd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc80-mt-1_47.lib +# +######################################################## +vc80/boost_regex-vc80-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc80/boost_regex-vc80-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc80/boost_regex-vc80-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/cregex.cpp + +vc80/boost_regex-vc80-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/fileiter.cpp + +vc80/boost_regex-vc80-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/icu.cpp + +vc80/boost_regex-vc80-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/instances.cpp + +vc80/boost_regex-vc80-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/posix_api.cpp + +vc80/boost_regex-vc80-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/regex.cpp + +vc80/boost_regex-vc80-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/regex_debug.cpp + +vc80/boost_regex-vc80-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc80/boost_regex-vc80-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc80/boost_regex-vc80-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/static_mutex.cpp + +vc80/boost_regex-vc80-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/usinstances.cpp + +vc80/boost_regex-vc80-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc80/boost_regex-vc80-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc80/boost_regex-vc80-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc80/boost_regex-vc80-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/boost_regex-vc80-mt-1_47/ -Fdvc80/boost_regex-vc80-mt-1_47.pdb ../src/winstances.cpp + +boost_regex-vc80-mt-1_47_dir : + @if not exist "vc80\boost_regex-vc80-mt-1_47\$(NULL)" mkdir vc80\boost_regex-vc80-mt-1_47 + +boost_regex-vc80-mt-1_47_clean : + del vc80\boost_regex-vc80-mt-1_47\*.obj + del vc80\boost_regex-vc80-mt-1_47\*.idb + del vc80\boost_regex-vc80-mt-1_47\*.exp + del vc80\boost_regex-vc80-mt-1_47\*.pch + +./vc80/boost_regex-vc80-mt-1_47.lib : vc80/boost_regex-vc80-mt-1_47/c_regex_traits.obj vc80/boost_regex-vc80-mt-1_47/cpp_regex_traits.obj vc80/boost_regex-vc80-mt-1_47/cregex.obj vc80/boost_regex-vc80-mt-1_47/fileiter.obj vc80/boost_regex-vc80-mt-1_47/icu.obj vc80/boost_regex-vc80-mt-1_47/instances.obj vc80/boost_regex-vc80-mt-1_47/posix_api.obj vc80/boost_regex-vc80-mt-1_47/regex.obj vc80/boost_regex-vc80-mt-1_47/regex_debug.obj vc80/boost_regex-vc80-mt-1_47/regex_raw_buffer.obj vc80/boost_regex-vc80-mt-1_47/regex_traits_defaults.obj vc80/boost_regex-vc80-mt-1_47/static_mutex.obj vc80/boost_regex-vc80-mt-1_47/usinstances.obj vc80/boost_regex-vc80-mt-1_47/w32_regex_traits.obj vc80/boost_regex-vc80-mt-1_47/wc_regex_traits.obj vc80/boost_regex-vc80-mt-1_47/wide_posix_api.obj vc80/boost_regex-vc80-mt-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc80/boost_regex-vc80-mt-1_47.pdb" /debug /machine:I386 /out:"vc80/boost_regex-vc80-mt-1_47.dll" /implib:"vc80/boost_regex-vc80-mt-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc80/boost_regex-vc80-mt-1_47/c_regex_traits.obj vc80/boost_regex-vc80-mt-1_47/cpp_regex_traits.obj vc80/boost_regex-vc80-mt-1_47/cregex.obj vc80/boost_regex-vc80-mt-1_47/fileiter.obj vc80/boost_regex-vc80-mt-1_47/icu.obj vc80/boost_regex-vc80-mt-1_47/instances.obj vc80/boost_regex-vc80-mt-1_47/posix_api.obj vc80/boost_regex-vc80-mt-1_47/regex.obj vc80/boost_regex-vc80-mt-1_47/regex_debug.obj vc80/boost_regex-vc80-mt-1_47/regex_raw_buffer.obj vc80/boost_regex-vc80-mt-1_47/regex_traits_defaults.obj vc80/boost_regex-vc80-mt-1_47/static_mutex.obj vc80/boost_regex-vc80-mt-1_47/usinstances.obj vc80/boost_regex-vc80-mt-1_47/w32_regex_traits.obj vc80/boost_regex-vc80-mt-1_47/wc_regex_traits.obj vc80/boost_regex-vc80-mt-1_47/wide_posix_api.obj vc80/boost_regex-vc80-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc80-mt-1_47.lib +# +######################################################## +vc80/libboost_regex-vc80-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/cregex.cpp + +vc80/libboost_regex-vc80-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/fileiter.cpp + +vc80/libboost_regex-vc80-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/icu.cpp + +vc80/libboost_regex-vc80-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/instances.cpp + +vc80/libboost_regex-vc80-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/posix_api.cpp + +vc80/libboost_regex-vc80-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/regex.cpp + +vc80/libboost_regex-vc80-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/regex_debug.cpp + +vc80/libboost_regex-vc80-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc80/libboost_regex-vc80-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc80/libboost_regex-vc80-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/static_mutex.cpp + +vc80/libboost_regex-vc80-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/usinstances.cpp + +vc80/libboost_regex-vc80-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc80/libboost_regex-vc80-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-1_47/ -Fdvc80/libboost_regex-vc80-mt-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc80-mt-1_47_dir : + @if not exist "vc80\libboost_regex-vc80-mt-1_47\$(NULL)" mkdir vc80\libboost_regex-vc80-mt-1_47 + +libboost_regex-vc80-mt-1_47_clean : + del vc80\libboost_regex-vc80-mt-1_47\*.obj + del vc80\libboost_regex-vc80-mt-1_47\*.idb + del vc80\libboost_regex-vc80-mt-1_47\*.exp + del vc80\libboost_regex-vc80-mt-1_47\*.pch + +./vc80/libboost_regex-vc80-mt-1_47.lib : vc80/libboost_regex-vc80-mt-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-mt-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-mt-1_47/cregex.obj vc80/libboost_regex-vc80-mt-1_47/fileiter.obj vc80/libboost_regex-vc80-mt-1_47/icu.obj vc80/libboost_regex-vc80-mt-1_47/instances.obj vc80/libboost_regex-vc80-mt-1_47/posix_api.obj vc80/libboost_regex-vc80-mt-1_47/regex.obj vc80/libboost_regex-vc80-mt-1_47/regex_debug.obj vc80/libboost_regex-vc80-mt-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-mt-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-mt-1_47/static_mutex.obj vc80/libboost_regex-vc80-mt-1_47/usinstances.obj vc80/libboost_regex-vc80-mt-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-mt-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-mt-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-mt-1_47/winstances.obj + link -lib /nologo /out:vc80/libboost_regex-vc80-mt-1_47.lib $(XSFLAGS) vc80/libboost_regex-vc80-mt-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-mt-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-mt-1_47/cregex.obj vc80/libboost_regex-vc80-mt-1_47/fileiter.obj vc80/libboost_regex-vc80-mt-1_47/icu.obj vc80/libboost_regex-vc80-mt-1_47/instances.obj vc80/libboost_regex-vc80-mt-1_47/posix_api.obj vc80/libboost_regex-vc80-mt-1_47/regex.obj vc80/libboost_regex-vc80-mt-1_47/regex_debug.obj vc80/libboost_regex-vc80-mt-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-mt-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-mt-1_47/static_mutex.obj vc80/libboost_regex-vc80-mt-1_47/usinstances.obj vc80/libboost_regex-vc80-mt-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-mt-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-mt-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc80-mt-gd-1_47.lib +# +######################################################## +vc80/libboost_regex-vc80-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/cregex.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/icu.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/instances.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/regex.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc80/libboost_regex-vc80-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc80/libboost_regex-vc80-mt-gd-1_47/ -Fdvc80/libboost_regex-vc80-mt-gd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc80-mt-gd-1_47_dir : + @if not exist "vc80\libboost_regex-vc80-mt-gd-1_47\$(NULL)" mkdir vc80\libboost_regex-vc80-mt-gd-1_47 + +libboost_regex-vc80-mt-gd-1_47_clean : + del vc80\libboost_regex-vc80-mt-gd-1_47\*.obj + del vc80\libboost_regex-vc80-mt-gd-1_47\*.idb + del vc80\libboost_regex-vc80-mt-gd-1_47\*.exp + del vc80\libboost_regex-vc80-mt-gd-1_47\*.pch + +./vc80/libboost_regex-vc80-mt-gd-1_47.lib : vc80/libboost_regex-vc80-mt-gd-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-mt-gd-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-mt-gd-1_47/cregex.obj vc80/libboost_regex-vc80-mt-gd-1_47/fileiter.obj vc80/libboost_regex-vc80-mt-gd-1_47/icu.obj vc80/libboost_regex-vc80-mt-gd-1_47/instances.obj vc80/libboost_regex-vc80-mt-gd-1_47/posix_api.obj vc80/libboost_regex-vc80-mt-gd-1_47/regex.obj vc80/libboost_regex-vc80-mt-gd-1_47/regex_debug.obj vc80/libboost_regex-vc80-mt-gd-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-mt-gd-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-mt-gd-1_47/static_mutex.obj vc80/libboost_regex-vc80-mt-gd-1_47/usinstances.obj vc80/libboost_regex-vc80-mt-gd-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-mt-gd-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-mt-gd-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-mt-gd-1_47/winstances.obj + link -lib /nologo /out:vc80/libboost_regex-vc80-mt-gd-1_47.lib $(XSFLAGS) vc80/libboost_regex-vc80-mt-gd-1_47/c_regex_traits.obj vc80/libboost_regex-vc80-mt-gd-1_47/cpp_regex_traits.obj vc80/libboost_regex-vc80-mt-gd-1_47/cregex.obj vc80/libboost_regex-vc80-mt-gd-1_47/fileiter.obj vc80/libboost_regex-vc80-mt-gd-1_47/icu.obj vc80/libboost_regex-vc80-mt-gd-1_47/instances.obj vc80/libboost_regex-vc80-mt-gd-1_47/posix_api.obj vc80/libboost_regex-vc80-mt-gd-1_47/regex.obj vc80/libboost_regex-vc80-mt-gd-1_47/regex_debug.obj vc80/libboost_regex-vc80-mt-gd-1_47/regex_raw_buffer.obj vc80/libboost_regex-vc80-mt-gd-1_47/regex_traits_defaults.obj vc80/libboost_regex-vc80-mt-gd-1_47/static_mutex.obj vc80/libboost_regex-vc80-mt-gd-1_47/usinstances.obj vc80/libboost_regex-vc80-mt-gd-1_47/w32_regex_traits.obj vc80/libboost_regex-vc80-mt-gd-1_47/wc_regex_traits.obj vc80/libboost_regex-vc80-mt-gd-1_47/wide_posix_api.obj vc80/libboost_regex-vc80-mt-gd-1_47/winstances.obj + diff --git a/libs/regex/build/vc9.mak b/libs/regex/build/vc9.mak new file mode 100644 index 0000000000..f878e97f40 --- /dev/null +++ b/libs/regex/build/vc9.mak @@ -0,0 +1,491 @@ +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for MSVC compiler +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# path to ICU library installation goes here: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(MSVCDIR)" == "" +MSVCDIR=$(VS90COMNTOOLS)..\..\VC +!ENDIF + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"$(ICU_PATH)\include" +ICU_LINK_OPTS= /LIBPATH:"$(ICU_PATH)\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in $(ICU_PATH) +!ENDIF + + +ALL_HEADER= ../../../boost/regex/config.hpp ../../../boost/regex/icu.hpp ../../../boost/regex/pattern_except.hpp ../../../boost/regex/regex_traits.hpp ../../../boost/regex/user.hpp ../../../boost/regex/v4/basic_regex.hpp ../../../boost/regex/v4/basic_regex_creator.hpp ../../../boost/regex/v4/basic_regex_parser.hpp ../../../boost/regex/v4/c_regex_traits.hpp ../../../boost/regex/v4/char_regex_traits.hpp ../../../boost/regex/v4/cpp_regex_traits.hpp ../../../boost/regex/v4/cregex.hpp ../../../boost/regex/v4/error_type.hpp ../../../boost/regex/v4/fileiter.hpp ../../../boost/regex/v4/instances.hpp ../../../boost/regex/v4/iterator_category.hpp ../../../boost/regex/v4/iterator_traits.hpp ../../../boost/regex/v4/match_flags.hpp ../../../boost/regex/v4/match_results.hpp ../../../boost/regex/v4/mem_block_cache.hpp ../../../boost/regex/v4/perl_matcher.hpp ../../../boost/regex/v4/perl_matcher_common.hpp ../../../boost/regex/v4/perl_matcher_non_recursive.hpp ../../../boost/regex/v4/perl_matcher_recursive.hpp ../../../boost/regex/v4/primary_transform.hpp ../../../boost/regex/v4/protected_call.hpp ../../../boost/regex/v4/regbase.hpp ../../../boost/regex/v4/regex.hpp ../../../boost/regex/v4/regex_format.hpp ../../../boost/regex/v4/regex_fwd.hpp ../../../boost/regex/v4/regex_grep.hpp ../../../boost/regex/v4/regex_iterator.hpp ../../../boost/regex/v4/regex_match.hpp ../../../boost/regex/v4/regex_merge.hpp ../../../boost/regex/v4/regex_raw_buffer.hpp ../../../boost/regex/v4/regex_replace.hpp ../../../boost/regex/v4/regex_search.hpp ../../../boost/regex/v4/regex_split.hpp ../../../boost/regex/v4/regex_token_iterator.hpp ../../../boost/regex/v4/regex_traits.hpp ../../../boost/regex/v4/regex_traits_defaults.hpp ../../../boost/regex/v4/regex_workaround.hpp ../../../boost/regex/v4/states.hpp ../../../boost/regex/v4/sub_match.hpp ../../../boost/regex/v4/syntax_type.hpp ../../../boost/regex/v4/u32regex_iterator.hpp ../../../boost/regex/v4/u32regex_token_iterator.hpp ../../../boost/regex/v4/w32_regex_traits.hpp ../../../boost/regex/config/borland.hpp ../../../boost/regex/config/cwchar.hpp + +all : main_dir libboost_regex-vc90-mt-s-1_47_dir ./vc90/libboost_regex-vc90-mt-s-1_47.lib libboost_regex-vc90-mt-sgd-1_47_dir ./vc90/libboost_regex-vc90-mt-sgd-1_47.lib boost_regex-vc90-mt-gd-1_47_dir ./vc90/boost_regex-vc90-mt-gd-1_47.lib boost_regex-vc90-mt-1_47_dir ./vc90/boost_regex-vc90-mt-1_47.lib libboost_regex-vc90-mt-1_47_dir ./vc90/libboost_regex-vc90-mt-1_47.lib libboost_regex-vc90-mt-gd-1_47_dir ./vc90/libboost_regex-vc90-mt-gd-1_47.lib + +clean : libboost_regex-vc90-mt-s-1_47_clean libboost_regex-vc90-mt-sgd-1_47_clean boost_regex-vc90-mt-gd-1_47_clean boost_regex-vc90-mt-1_47_clean libboost_regex-vc90-mt-1_47_clean libboost_regex-vc90-mt-gd-1_47_clean + +install : all + copy vc90\libboost_regex-vc90-mt-s-1_47.lib "$(MSVCDIR)\lib" + copy vc90\libboost_regex-vc90-mt-sgd-1_47.lib "$(MSVCDIR)\lib" + copy vc90\boost_regex-vc90-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc90\boost_regex-vc90-mt-gd-1_47.dll "$(MSVCDIR)\bin" + copy vc90\boost_regex-vc90-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc90\boost_regex-vc90-mt-1_47.dll "$(MSVCDIR)\bin" + copy vc90\libboost_regex-vc90-mt-1_47.lib "$(MSVCDIR)\lib" + copy vc90\libboost_regex-vc90-mt-gd-1_47.lib "$(MSVCDIR)\lib" + copy vc90\libboost_regex-vc90-mt-gd-1_47.pdb "$(MSVCDIR)\lib" + +main_dir : + @if not exist "vc90\$(NULL)" mkdir vc90 + + +######################################################## +# +# section for libboost_regex-vc90-mt-s-1_47.lib +# +######################################################## +vc90/libboost_regex-vc90-mt-s-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/c_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/cpp_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/cregex.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/fileiter.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/icu.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/instances.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/posix_api.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/regex.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/regex_debug.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/regex_raw_buffer.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/regex_traits_defaults.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/static_mutex.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/usinstances.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/w32_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/wc_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/wide_posix_api.cpp + +vc90/libboost_regex-vc90-mt-s-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MT /W3 /EHsc /O2 /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-s-1_47/ -Fdvc90/libboost_regex-vc90-mt-s-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc90-mt-s-1_47_dir : + @if not exist "vc90\libboost_regex-vc90-mt-s-1_47\$(NULL)" mkdir vc90\libboost_regex-vc90-mt-s-1_47 + +libboost_regex-vc90-mt-s-1_47_clean : + del vc90\libboost_regex-vc90-mt-s-1_47\*.obj + del vc90\libboost_regex-vc90-mt-s-1_47\*.idb + del vc90\libboost_regex-vc90-mt-s-1_47\*.exp + del vc90\libboost_regex-vc90-mt-s-1_47\*.pch + +./vc90/libboost_regex-vc90-mt-s-1_47.lib : vc90/libboost_regex-vc90-mt-s-1_47/c_regex_traits.obj vc90/libboost_regex-vc90-mt-s-1_47/cpp_regex_traits.obj vc90/libboost_regex-vc90-mt-s-1_47/cregex.obj vc90/libboost_regex-vc90-mt-s-1_47/fileiter.obj vc90/libboost_regex-vc90-mt-s-1_47/icu.obj vc90/libboost_regex-vc90-mt-s-1_47/instances.obj vc90/libboost_regex-vc90-mt-s-1_47/posix_api.obj vc90/libboost_regex-vc90-mt-s-1_47/regex.obj vc90/libboost_regex-vc90-mt-s-1_47/regex_debug.obj vc90/libboost_regex-vc90-mt-s-1_47/regex_raw_buffer.obj vc90/libboost_regex-vc90-mt-s-1_47/regex_traits_defaults.obj vc90/libboost_regex-vc90-mt-s-1_47/static_mutex.obj vc90/libboost_regex-vc90-mt-s-1_47/usinstances.obj vc90/libboost_regex-vc90-mt-s-1_47/w32_regex_traits.obj vc90/libboost_regex-vc90-mt-s-1_47/wc_regex_traits.obj vc90/libboost_regex-vc90-mt-s-1_47/wide_posix_api.obj vc90/libboost_regex-vc90-mt-s-1_47/winstances.obj + link -lib /nologo /out:vc90/libboost_regex-vc90-mt-s-1_47.lib $(XSFLAGS) vc90/libboost_regex-vc90-mt-s-1_47/c_regex_traits.obj vc90/libboost_regex-vc90-mt-s-1_47/cpp_regex_traits.obj vc90/libboost_regex-vc90-mt-s-1_47/cregex.obj vc90/libboost_regex-vc90-mt-s-1_47/fileiter.obj vc90/libboost_regex-vc90-mt-s-1_47/icu.obj vc90/libboost_regex-vc90-mt-s-1_47/instances.obj vc90/libboost_regex-vc90-mt-s-1_47/posix_api.obj vc90/libboost_regex-vc90-mt-s-1_47/regex.obj vc90/libboost_regex-vc90-mt-s-1_47/regex_debug.obj vc90/libboost_regex-vc90-mt-s-1_47/regex_raw_buffer.obj vc90/libboost_regex-vc90-mt-s-1_47/regex_traits_defaults.obj vc90/libboost_regex-vc90-mt-s-1_47/static_mutex.obj vc90/libboost_regex-vc90-mt-s-1_47/usinstances.obj vc90/libboost_regex-vc90-mt-s-1_47/w32_regex_traits.obj vc90/libboost_regex-vc90-mt-s-1_47/wc_regex_traits.obj vc90/libboost_regex-vc90-mt-s-1_47/wide_posix_api.obj vc90/libboost_regex-vc90-mt-s-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc90-mt-sgd-1_47.lib +# +######################################################## +vc90/libboost_regex-vc90-mt-sgd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/c_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/cregex.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/fileiter.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/icu.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/instances.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/posix_api.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/regex.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/regex_debug.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/static_mutex.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/usinstances.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/w32_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/wc_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/wide_posix_api.cpp + +vc90/libboost_regex-vc90-mt-sgd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MTd /W3 /Gm /EHsc /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-sgd-1_47/ -Fdvc90/libboost_regex-vc90-mt-sgd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc90-mt-sgd-1_47_dir : + @if not exist "vc90\libboost_regex-vc90-mt-sgd-1_47\$(NULL)" mkdir vc90\libboost_regex-vc90-mt-sgd-1_47 + +libboost_regex-vc90-mt-sgd-1_47_clean : + del vc90\libboost_regex-vc90-mt-sgd-1_47\*.obj + del vc90\libboost_regex-vc90-mt-sgd-1_47\*.idb + del vc90\libboost_regex-vc90-mt-sgd-1_47\*.exp + del vc90\libboost_regex-vc90-mt-sgd-1_47\*.pch + +./vc90/libboost_regex-vc90-mt-sgd-1_47.lib : vc90/libboost_regex-vc90-mt-sgd-1_47/c_regex_traits.obj vc90/libboost_regex-vc90-mt-sgd-1_47/cpp_regex_traits.obj vc90/libboost_regex-vc90-mt-sgd-1_47/cregex.obj vc90/libboost_regex-vc90-mt-sgd-1_47/fileiter.obj vc90/libboost_regex-vc90-mt-sgd-1_47/icu.obj vc90/libboost_regex-vc90-mt-sgd-1_47/instances.obj vc90/libboost_regex-vc90-mt-sgd-1_47/posix_api.obj vc90/libboost_regex-vc90-mt-sgd-1_47/regex.obj vc90/libboost_regex-vc90-mt-sgd-1_47/regex_debug.obj vc90/libboost_regex-vc90-mt-sgd-1_47/regex_raw_buffer.obj vc90/libboost_regex-vc90-mt-sgd-1_47/regex_traits_defaults.obj vc90/libboost_regex-vc90-mt-sgd-1_47/static_mutex.obj vc90/libboost_regex-vc90-mt-sgd-1_47/usinstances.obj vc90/libboost_regex-vc90-mt-sgd-1_47/w32_regex_traits.obj vc90/libboost_regex-vc90-mt-sgd-1_47/wc_regex_traits.obj vc90/libboost_regex-vc90-mt-sgd-1_47/wide_posix_api.obj vc90/libboost_regex-vc90-mt-sgd-1_47/winstances.obj + link -lib /nologo /out:vc90/libboost_regex-vc90-mt-sgd-1_47.lib $(XSFLAGS) vc90/libboost_regex-vc90-mt-sgd-1_47/c_regex_traits.obj vc90/libboost_regex-vc90-mt-sgd-1_47/cpp_regex_traits.obj vc90/libboost_regex-vc90-mt-sgd-1_47/cregex.obj vc90/libboost_regex-vc90-mt-sgd-1_47/fileiter.obj vc90/libboost_regex-vc90-mt-sgd-1_47/icu.obj vc90/libboost_regex-vc90-mt-sgd-1_47/instances.obj vc90/libboost_regex-vc90-mt-sgd-1_47/posix_api.obj vc90/libboost_regex-vc90-mt-sgd-1_47/regex.obj vc90/libboost_regex-vc90-mt-sgd-1_47/regex_debug.obj vc90/libboost_regex-vc90-mt-sgd-1_47/regex_raw_buffer.obj vc90/libboost_regex-vc90-mt-sgd-1_47/regex_traits_defaults.obj vc90/libboost_regex-vc90-mt-sgd-1_47/static_mutex.obj vc90/libboost_regex-vc90-mt-sgd-1_47/usinstances.obj vc90/libboost_regex-vc90-mt-sgd-1_47/w32_regex_traits.obj vc90/libboost_regex-vc90-mt-sgd-1_47/wc_regex_traits.obj vc90/libboost_regex-vc90-mt-sgd-1_47/wide_posix_api.obj vc90/libboost_regex-vc90-mt-sgd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc90-mt-gd-1_47.lib +# +######################################################## +vc90/boost_regex-vc90-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/cregex.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/icu.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/instances.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/regex.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc90/boost_regex-vc90-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-gd-1_47/ -Fdvc90/boost_regex-vc90-mt-gd-1_47.pdb ../src/winstances.cpp + +boost_regex-vc90-mt-gd-1_47_dir : + @if not exist "vc90\boost_regex-vc90-mt-gd-1_47\$(NULL)" mkdir vc90\boost_regex-vc90-mt-gd-1_47 + +boost_regex-vc90-mt-gd-1_47_clean : + del vc90\boost_regex-vc90-mt-gd-1_47\*.obj + del vc90\boost_regex-vc90-mt-gd-1_47\*.idb + del vc90\boost_regex-vc90-mt-gd-1_47\*.exp + del vc90\boost_regex-vc90-mt-gd-1_47\*.pch + +./vc90/boost_regex-vc90-mt-gd-1_47.lib : vc90/boost_regex-vc90-mt-gd-1_47/c_regex_traits.obj vc90/boost_regex-vc90-mt-gd-1_47/cpp_regex_traits.obj vc90/boost_regex-vc90-mt-gd-1_47/cregex.obj vc90/boost_regex-vc90-mt-gd-1_47/fileiter.obj vc90/boost_regex-vc90-mt-gd-1_47/icu.obj vc90/boost_regex-vc90-mt-gd-1_47/instances.obj vc90/boost_regex-vc90-mt-gd-1_47/posix_api.obj vc90/boost_regex-vc90-mt-gd-1_47/regex.obj vc90/boost_regex-vc90-mt-gd-1_47/regex_debug.obj vc90/boost_regex-vc90-mt-gd-1_47/regex_raw_buffer.obj vc90/boost_regex-vc90-mt-gd-1_47/regex_traits_defaults.obj vc90/boost_regex-vc90-mt-gd-1_47/static_mutex.obj vc90/boost_regex-vc90-mt-gd-1_47/usinstances.obj vc90/boost_regex-vc90-mt-gd-1_47/w32_regex_traits.obj vc90/boost_regex-vc90-mt-gd-1_47/wc_regex_traits.obj vc90/boost_regex-vc90-mt-gd-1_47/wide_posix_api.obj vc90/boost_regex-vc90-mt-gd-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc90/boost_regex-vc90-mt-gd-1_47.pdb" /debug /machine:I386 /out:"vc90/boost_regex-vc90-mt-gd-1_47.dll" /implib:"vc90/boost_regex-vc90-mt-gd-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc90/boost_regex-vc90-mt-gd-1_47/c_regex_traits.obj vc90/boost_regex-vc90-mt-gd-1_47/cpp_regex_traits.obj vc90/boost_regex-vc90-mt-gd-1_47/cregex.obj vc90/boost_regex-vc90-mt-gd-1_47/fileiter.obj vc90/boost_regex-vc90-mt-gd-1_47/icu.obj vc90/boost_regex-vc90-mt-gd-1_47/instances.obj vc90/boost_regex-vc90-mt-gd-1_47/posix_api.obj vc90/boost_regex-vc90-mt-gd-1_47/regex.obj vc90/boost_regex-vc90-mt-gd-1_47/regex_debug.obj vc90/boost_regex-vc90-mt-gd-1_47/regex_raw_buffer.obj vc90/boost_regex-vc90-mt-gd-1_47/regex_traits_defaults.obj vc90/boost_regex-vc90-mt-gd-1_47/static_mutex.obj vc90/boost_regex-vc90-mt-gd-1_47/usinstances.obj vc90/boost_regex-vc90-mt-gd-1_47/w32_regex_traits.obj vc90/boost_regex-vc90-mt-gd-1_47/wc_regex_traits.obj vc90/boost_regex-vc90-mt-gd-1_47/wide_posix_api.obj vc90/boost_regex-vc90-mt-gd-1_47/winstances.obj + +######################################################## +# +# section for boost_regex-vc90-mt-1_47.lib +# +######################################################## +vc90/boost_regex-vc90-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc90/boost_regex-vc90-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc90/boost_regex-vc90-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/cregex.cpp + +vc90/boost_regex-vc90-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/fileiter.cpp + +vc90/boost_regex-vc90-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/icu.cpp + +vc90/boost_regex-vc90-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/instances.cpp + +vc90/boost_regex-vc90-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/posix_api.cpp + +vc90/boost_regex-vc90-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/regex.cpp + +vc90/boost_regex-vc90-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/regex_debug.cpp + +vc90/boost_regex-vc90-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc90/boost_regex-vc90-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc90/boost_regex-vc90-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/static_mutex.cpp + +vc90/boost_regex-vc90-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/usinstances.cpp + +vc90/boost_regex-vc90-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc90/boost_regex-vc90-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc90/boost_regex-vc90-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc90/boost_regex-vc90-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/boost_regex-vc90-mt-1_47/ -Fdvc90/boost_regex-vc90-mt-1_47.pdb ../src/winstances.cpp + +boost_regex-vc90-mt-1_47_dir : + @if not exist "vc90\boost_regex-vc90-mt-1_47\$(NULL)" mkdir vc90\boost_regex-vc90-mt-1_47 + +boost_regex-vc90-mt-1_47_clean : + del vc90\boost_regex-vc90-mt-1_47\*.obj + del vc90\boost_regex-vc90-mt-1_47\*.idb + del vc90\boost_regex-vc90-mt-1_47\*.exp + del vc90\boost_regex-vc90-mt-1_47\*.pch + +./vc90/boost_regex-vc90-mt-1_47.lib : vc90/boost_regex-vc90-mt-1_47/c_regex_traits.obj vc90/boost_regex-vc90-mt-1_47/cpp_regex_traits.obj vc90/boost_regex-vc90-mt-1_47/cregex.obj vc90/boost_regex-vc90-mt-1_47/fileiter.obj vc90/boost_regex-vc90-mt-1_47/icu.obj vc90/boost_regex-vc90-mt-1_47/instances.obj vc90/boost_regex-vc90-mt-1_47/posix_api.obj vc90/boost_regex-vc90-mt-1_47/regex.obj vc90/boost_regex-vc90-mt-1_47/regex_debug.obj vc90/boost_regex-vc90-mt-1_47/regex_raw_buffer.obj vc90/boost_regex-vc90-mt-1_47/regex_traits_defaults.obj vc90/boost_regex-vc90-mt-1_47/static_mutex.obj vc90/boost_regex-vc90-mt-1_47/usinstances.obj vc90/boost_regex-vc90-mt-1_47/w32_regex_traits.obj vc90/boost_regex-vc90-mt-1_47/wc_regex_traits.obj vc90/boost_regex-vc90-mt-1_47/wide_posix_api.obj vc90/boost_regex-vc90-mt-1_47/winstances.obj + link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:"vc90/boost_regex-vc90-mt-1_47.pdb" /debug /machine:I386 /out:"vc90/boost_regex-vc90-mt-1_47.dll" /implib:"vc90/boost_regex-vc90-mt-1_47.lib" /LIBPATH:"$(STLPORT_PATH)\lib" $(XLFLAGS) $(ICU_LINK_OPTS) vc90/boost_regex-vc90-mt-1_47/c_regex_traits.obj vc90/boost_regex-vc90-mt-1_47/cpp_regex_traits.obj vc90/boost_regex-vc90-mt-1_47/cregex.obj vc90/boost_regex-vc90-mt-1_47/fileiter.obj vc90/boost_regex-vc90-mt-1_47/icu.obj vc90/boost_regex-vc90-mt-1_47/instances.obj vc90/boost_regex-vc90-mt-1_47/posix_api.obj vc90/boost_regex-vc90-mt-1_47/regex.obj vc90/boost_regex-vc90-mt-1_47/regex_debug.obj vc90/boost_regex-vc90-mt-1_47/regex_raw_buffer.obj vc90/boost_regex-vc90-mt-1_47/regex_traits_defaults.obj vc90/boost_regex-vc90-mt-1_47/static_mutex.obj vc90/boost_regex-vc90-mt-1_47/usinstances.obj vc90/boost_regex-vc90-mt-1_47/w32_regex_traits.obj vc90/boost_regex-vc90-mt-1_47/wc_regex_traits.obj vc90/boost_regex-vc90-mt-1_47/wide_posix_api.obj vc90/boost_regex-vc90-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc90-mt-1_47.lib +# +######################################################## +vc90/libboost_regex-vc90-mt-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/c_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/cpp_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/cregex.cpp + +vc90/libboost_regex-vc90-mt-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/fileiter.cpp + +vc90/libboost_regex-vc90-mt-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/icu.cpp + +vc90/libboost_regex-vc90-mt-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/instances.cpp + +vc90/libboost_regex-vc90-mt-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/posix_api.cpp + +vc90/libboost_regex-vc90-mt-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/regex.cpp + +vc90/libboost_regex-vc90-mt-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/regex_debug.cpp + +vc90/libboost_regex-vc90-mt-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/regex_raw_buffer.cpp + +vc90/libboost_regex-vc90-mt-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/regex_traits_defaults.cpp + +vc90/libboost_regex-vc90-mt-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/static_mutex.cpp + +vc90/libboost_regex-vc90-mt-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/usinstances.cpp + +vc90/libboost_regex-vc90-mt-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/w32_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/wc_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/wide_posix_api.cpp + +vc90/libboost_regex-vc90-mt-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MD /W3 /EHsc /O2 /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD /Zc:wchar_t /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-1_47/ -Fdvc90/libboost_regex-vc90-mt-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc90-mt-1_47_dir : + @if not exist "vc90\libboost_regex-vc90-mt-1_47\$(NULL)" mkdir vc90\libboost_regex-vc90-mt-1_47 + +libboost_regex-vc90-mt-1_47_clean : + del vc90\libboost_regex-vc90-mt-1_47\*.obj + del vc90\libboost_regex-vc90-mt-1_47\*.idb + del vc90\libboost_regex-vc90-mt-1_47\*.exp + del vc90\libboost_regex-vc90-mt-1_47\*.pch + +./vc90/libboost_regex-vc90-mt-1_47.lib : vc90/libboost_regex-vc90-mt-1_47/c_regex_traits.obj vc90/libboost_regex-vc90-mt-1_47/cpp_regex_traits.obj vc90/libboost_regex-vc90-mt-1_47/cregex.obj vc90/libboost_regex-vc90-mt-1_47/fileiter.obj vc90/libboost_regex-vc90-mt-1_47/icu.obj vc90/libboost_regex-vc90-mt-1_47/instances.obj vc90/libboost_regex-vc90-mt-1_47/posix_api.obj vc90/libboost_regex-vc90-mt-1_47/regex.obj vc90/libboost_regex-vc90-mt-1_47/regex_debug.obj vc90/libboost_regex-vc90-mt-1_47/regex_raw_buffer.obj vc90/libboost_regex-vc90-mt-1_47/regex_traits_defaults.obj vc90/libboost_regex-vc90-mt-1_47/static_mutex.obj vc90/libboost_regex-vc90-mt-1_47/usinstances.obj vc90/libboost_regex-vc90-mt-1_47/w32_regex_traits.obj vc90/libboost_regex-vc90-mt-1_47/wc_regex_traits.obj vc90/libboost_regex-vc90-mt-1_47/wide_posix_api.obj vc90/libboost_regex-vc90-mt-1_47/winstances.obj + link -lib /nologo /out:vc90/libboost_regex-vc90-mt-1_47.lib $(XSFLAGS) vc90/libboost_regex-vc90-mt-1_47/c_regex_traits.obj vc90/libboost_regex-vc90-mt-1_47/cpp_regex_traits.obj vc90/libboost_regex-vc90-mt-1_47/cregex.obj vc90/libboost_regex-vc90-mt-1_47/fileiter.obj vc90/libboost_regex-vc90-mt-1_47/icu.obj vc90/libboost_regex-vc90-mt-1_47/instances.obj vc90/libboost_regex-vc90-mt-1_47/posix_api.obj vc90/libboost_regex-vc90-mt-1_47/regex.obj vc90/libboost_regex-vc90-mt-1_47/regex_debug.obj vc90/libboost_regex-vc90-mt-1_47/regex_raw_buffer.obj vc90/libboost_regex-vc90-mt-1_47/regex_traits_defaults.obj vc90/libboost_regex-vc90-mt-1_47/static_mutex.obj vc90/libboost_regex-vc90-mt-1_47/usinstances.obj vc90/libboost_regex-vc90-mt-1_47/w32_regex_traits.obj vc90/libboost_regex-vc90-mt-1_47/wc_regex_traits.obj vc90/libboost_regex-vc90-mt-1_47/wide_posix_api.obj vc90/libboost_regex-vc90-mt-1_47/winstances.obj + +######################################################## +# +# section for libboost_regex-vc90-mt-gd-1_47.lib +# +######################################################## +vc90/libboost_regex-vc90-mt-gd-1_47/c_regex_traits.obj: ../src/c_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/c_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/cpp_regex_traits.obj: ../src/cpp_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/cpp_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/cregex.obj: ../src/cregex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/cregex.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/fileiter.obj: ../src/fileiter.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/fileiter.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/icu.obj: ../src/icu.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/icu.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/instances.obj: ../src/instances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/instances.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/posix_api.obj: ../src/posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/posix_api.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/regex.obj: ../src/regex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/regex.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/regex_debug.obj: ../src/regex_debug.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/regex_debug.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/regex_raw_buffer.obj: ../src/regex_raw_buffer.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/regex_raw_buffer.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/regex_traits_defaults.obj: ../src/regex_traits_defaults.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/regex_traits_defaults.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/static_mutex.obj: ../src/static_mutex.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/static_mutex.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/usinstances.obj: ../src/usinstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/usinstances.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/w32_regex_traits.obj: ../src/w32_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/w32_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/wc_regex_traits.obj: ../src/wc_regex_traits.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/wc_regex_traits.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/wide_posix_api.obj: ../src/wide_posix_api.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/wide_posix_api.cpp + +vc90/libboost_regex-vc90-mt-gd-1_47/winstances.obj: ../src/winstances.cpp $(ALL_HEADER) + cl $(INCLUDES) /nologo /MDd /W3 /Gm /EHsc /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD /EHsc /c $(CXXFLAGS) $(ICU_COMPILE_OPTS) -Y- -Fo./vc90/libboost_regex-vc90-mt-gd-1_47/ -Fdvc90/libboost_regex-vc90-mt-gd-1_47.pdb ../src/winstances.cpp + +libboost_regex-vc90-mt-gd-1_47_dir : + @if not exist "vc90\libboost_regex-vc90-mt-gd-1_47\$(NULL)" mkdir vc90\libboost_regex-vc90-mt-gd-1_47 + +libboost_regex-vc90-mt-gd-1_47_clean : + del vc90\libboost_regex-vc90-mt-gd-1_47\*.obj + del vc90\libboost_regex-vc90-mt-gd-1_47\*.idb + del vc90\libboost_regex-vc90-mt-gd-1_47\*.exp + del vc90\libboost_regex-vc90-mt-gd-1_47\*.pch + +./vc90/libboost_regex-vc90-mt-gd-1_47.lib : vc90/libboost_regex-vc90-mt-gd-1_47/c_regex_traits.obj vc90/libboost_regex-vc90-mt-gd-1_47/cpp_regex_traits.obj vc90/libboost_regex-vc90-mt-gd-1_47/cregex.obj vc90/libboost_regex-vc90-mt-gd-1_47/fileiter.obj vc90/libboost_regex-vc90-mt-gd-1_47/icu.obj vc90/libboost_regex-vc90-mt-gd-1_47/instances.obj vc90/libboost_regex-vc90-mt-gd-1_47/posix_api.obj vc90/libboost_regex-vc90-mt-gd-1_47/regex.obj vc90/libboost_regex-vc90-mt-gd-1_47/regex_debug.obj vc90/libboost_regex-vc90-mt-gd-1_47/regex_raw_buffer.obj vc90/libboost_regex-vc90-mt-gd-1_47/regex_traits_defaults.obj vc90/libboost_regex-vc90-mt-gd-1_47/static_mutex.obj vc90/libboost_regex-vc90-mt-gd-1_47/usinstances.obj vc90/libboost_regex-vc90-mt-gd-1_47/w32_regex_traits.obj vc90/libboost_regex-vc90-mt-gd-1_47/wc_regex_traits.obj vc90/libboost_regex-vc90-mt-gd-1_47/wide_posix_api.obj vc90/libboost_regex-vc90-mt-gd-1_47/winstances.obj + link -lib /nologo /out:vc90/libboost_regex-vc90-mt-gd-1_47.lib $(XSFLAGS) vc90/libboost_regex-vc90-mt-gd-1_47/c_regex_traits.obj vc90/libboost_regex-vc90-mt-gd-1_47/cpp_regex_traits.obj vc90/libboost_regex-vc90-mt-gd-1_47/cregex.obj vc90/libboost_regex-vc90-mt-gd-1_47/fileiter.obj vc90/libboost_regex-vc90-mt-gd-1_47/icu.obj vc90/libboost_regex-vc90-mt-gd-1_47/instances.obj vc90/libboost_regex-vc90-mt-gd-1_47/posix_api.obj vc90/libboost_regex-vc90-mt-gd-1_47/regex.obj vc90/libboost_regex-vc90-mt-gd-1_47/regex_debug.obj vc90/libboost_regex-vc90-mt-gd-1_47/regex_raw_buffer.obj vc90/libboost_regex-vc90-mt-gd-1_47/regex_traits_defaults.obj vc90/libboost_regex-vc90-mt-gd-1_47/static_mutex.obj vc90/libboost_regex-vc90-mt-gd-1_47/usinstances.obj vc90/libboost_regex-vc90-mt-gd-1_47/w32_regex_traits.obj vc90/libboost_regex-vc90-mt-gd-1_47/wc_regex_traits.obj vc90/libboost_regex-vc90-mt-gd-1_47/wide_posix_api.obj vc90/libboost_regex-vc90-mt-gd-1_47/winstances.obj + diff --git a/libs/regex/build/vc_gen.sh b/libs/regex/build/vc_gen.sh new file mode 100644 index 0000000000..0838770e2a --- /dev/null +++ b/libs/regex/build/vc_gen.sh @@ -0,0 +1,509 @@ +#! /bin/bash + +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +libname="" +src="" +header="" +all_dep="" + +# current makefile: +out="" +# temporary file: +tout="" +# install target temp file: +iout="" +# debug flag: +debug="no" +# compile options: +opts="" +# main output sub-directory: +subdir="" +stlport_suffix="" +# extra debug /RTc options: +debug_extra="" + +function vc6_gen_lib() +{ + all_dep="$all_dep $libname""_dir ./$subdir$stlport_suffix/$libname.lib" + echo " copy $subdir$stlport_suffix\\$libname.lib "'"$'"(MSVCDIR)\\lib"'"' >> $iout + if test $debug == "yes"; then + echo " copy $subdir$stlport_suffix\\$libname.pdb "'"$'"(MSVCDIR)\\lib"'"' >> $iout + fi +# +# set up section comments: + cat >> $tout << EOF +######################################################## +# +# section for $libname.lib +# +######################################################## +EOF +# +# process source files: + all_obj="" + for file in $src + do + obj=`echo "$file" | sed 's/.*src\/\(.*\)cpp/\1obj/g'` + obj="$subdir$stlport_suffix/$libname/$obj" + all_obj="$all_obj $obj" + echo "$obj: $file \$(ALL_HEADER)" >> $tout + echo " cl \$(INCLUDES) $opts \$(CXXFLAGS) \$(ICU_COMPILE_OPTS) -Y- -Fo./$subdir$stlport_suffix/$libname/ -Fd$subdir$stlport_suffix/$libname.pdb $file" >> $tout + echo "" >> $tout + done +# +# now for the directories for this library: + echo "$libname"_dir : >> $tout + echo " @if not exist \"$subdir$stlport_suffix\\$libname\\\$(NULL)\" mkdir $subdir$stlport_suffix\\$libname" >> $tout + echo "" >> $tout +# +# now for the clean options for this library: + all_clean="$all_clean $libname""_clean" + echo "$libname"_clean : >> $tout + echo " del $subdir$stlport_suffix\\$libname\\"'*.obj' >> $tout + echo " del $subdir$stlport_suffix\\$libname\\"'*.idb' >> $tout + echo " del $subdir$stlport_suffix\\$libname\\"'*.exp' >> $tout + echo " del $subdir$stlport_suffix\\$libname\\"'*.pch' >> $tout + echo "" >> $tout +# +# now for the main target for this library: + echo ./$subdir$stlport_suffix/$libname.lib : $all_obj >> $tout + echo " link -lib /nologo /out:$subdir$stlport_suffix/$libname.lib \$(XSFLAGS) $all_obj" >> $tout + echo "" >> $tout +} + +function vc6_gen_dll() +{ + all_dep="$all_dep $libname""_dir ./$subdir$stlport_suffix/$libname.lib" + echo " copy $subdir$stlport_suffix\\$libname.lib "'"$'"(MSVCDIR)\\lib"'"' >> $iout + echo " copy $subdir$stlport_suffix\\$libname.dll "'"$'"(MSVCDIR)\\bin"'"' >> $iout + if test $debug == "yes"; then + echo " copy $subdir$stlport_suffix\\$libname.pdb "'"$'"(MSVCDIR)\\lib"'"' >> $iout + fi +# +# set up section comments: + cat >> $tout << EOF +######################################################## +# +# section for $libname.lib +# +######################################################## +EOF +# +# process source files: + all_obj="" + for file in $src + do + obj=`echo "$file" | sed 's/.*src\/\(.*\)cpp/\1obj/g'` + obj="$subdir$stlport_suffix/$libname/$obj" + all_obj="$all_obj $obj" + echo "$obj: $file \$(ALL_HEADER)" >> $tout + echo " cl \$(INCLUDES) $opts \$(CXXFLAGS) \$(ICU_COMPILE_OPTS) -Y- -Fo./$subdir$stlport_suffix/$libname/ -Fd$subdir$stlport_suffix/$libname.pdb $file" >> $tout + echo "" >> $tout + done +# +# now for the directories for this library: + echo "$libname"_dir : >> $tout + echo " @if not exist \"$subdir$stlport_suffix\\$libname\\\$(NULL)\" mkdir $subdir$stlport_suffix\\$libname" >> $tout + echo "" >> $tout +# +# now for the clean options for this library: + all_clean="$all_clean $libname""_clean" + echo "$libname"_clean : >> $tout + echo " del $subdir$stlport_suffix\\$libname\\"'*.obj' >> $tout + echo " del $subdir$stlport_suffix\\$libname\\"'*.idb' >> $tout + echo " del $subdir$stlport_suffix\\$libname\\"'*.exp' >> $tout + echo " del $subdir$stlport_suffix\\$libname\\"'*.pch' >> $tout + echo "" >> $tout +# +# now for the main target for this library: + echo ./$subdir$stlport_suffix/$libname.lib : $all_obj >> $tout + echo " link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /incremental:yes /pdb:\"$subdir$stlport_suffix/$libname.pdb\" /debug /machine:I386 /out:\"$subdir$stlport_suffix/$libname.dll\" /implib:\"$subdir$stlport_suffix/$libname.lib\" /LIBPATH:\"\$(STLPORT_PATH)\\lib\" \$(XLFLAGS) \$(ICU_LINK_OPTS) $all_obj" >> $tout + echo "" >> $tout +} + +is_stlport="no" +build_static="yes" + +function vc6_gen() +{ + debug="no" + tout="temp" + iout="temp_install" + all_dep="main_dir" + all_clean="" + echo > $out + echo > $tout + rm -f $iout + stlport_suffix="" + + if test ${build_static} == "yes" ; then + libname="libboost_regex-${subdir}-s-${boost_version}" + opts='/c /nologo /ML /W3 '$EH_OPTS' /O2 '$PROC_OPTS' /GF /Gy /I..\..\..\ /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD '"$release_extra"' ' + vc6_gen_lib + fi + + libname="libboost_regex-${subdir}-mt-s-${boost_version}" + opts='/nologo /MT /W3 '$EH_OPTS' /O2 '$PROC_OPTS' /GF /Gy /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB /FD '"$release_extra"' /c' + vc6_gen_lib + + if test ${build_static} == "yes" ; then + debug="yes" + libname="libboost_regex-${subdir}-sgd-${boost_version}" + opts='/nologo /MLd /W3 /Gm '$EH_OPTS' /Zi /Od /I..\..\..\ /DWIN32 /D_DEBUG /D_MBCS /D_LIB /FD '"$debug_extra"' /c ' + vc6_gen_lib + fi + + libname="libboost_regex-${subdir}-mt-sgd-${boost_version}" + opts='/nologo /MTd /W3 /Gm '$EH_OPTS' /Zi /Od /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB /FD '"$debug_extra"' /c' + vc6_gen_lib + + libname="boost_regex-${subdir}-mt-gd-${boost_version}" + opts='/nologo /MDd /W3 /Gm '$EH_OPTS' /Zi /Od /I../../../ /D_DEBUG /DBOOST_REGEX_DYN_LINK /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD '"$debug_extra"' /c' + vc6_gen_dll + + debug="no" + opts='/nologo /MD /W3 '$EH_OPTS' /O2 '$PROC_OPTS' /GF /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD '"$release_extra"' /c' + libname="boost_regex-${subdir}-mt-${boost_version}" + vc6_gen_dll + + debug="no" + opts='/nologo /MD /W3 '$EH_OPTS' /O2 '$PROC_OPTS' /GF /Gy /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL /FD '"$release_extra"' /c' + libname="libboost_regex-${subdir}-mt-${boost_version}" + vc6_gen_lib + + debug="yes" + libname="libboost_regex-${subdir}-mt-gd-${boost_version}" + opts='/nologo /MDd /W3 /Gm '$EH_OPTS' /Zi /Od /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL /FD '"$debug_extra"' /c' + vc6_gen_lib + + VC8_CHECK="" + echo ${subdir} + if test ${subdir} = "vc80" ; then + VC8_CHECK='MSVCDIR=$(VS80COMNTOOLS)..\..\VC' + echo setting VC8 setup to: ${VC8_CHECK} + else + if test ${subdir} = "vc71" ; then + VC8_CHECK='MSVCDIR=$(VS71COMNTOOLS)..\..\VC7' + echo setting VC71 setup to: ${VC8_CHECK} + fi + if test ${subdir} = "vc90" ; then + VC8_CHECK='MSVCDIR=$(VS90COMNTOOLS)..\..\VC' + echo setting VC9 setup to: ${VC8_CHECK} + fi + if test ${subdir} = "vc100" ; then + VC8_CHECK='MSVCDIR=$(VS100COMNTOOLS)..\..\VC' + echo setting VC10 setup to: ${VC8_CHECK} + fi + fi + + cat > $out << EOF +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for MSVC compiler +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# path to ICU library installation goes here: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "\$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "\$(MSVCDIR)" == "" +$VC8_CHECK +!ENDIF + +!IF "\$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "\$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"\$(ICU_PATH)\\include" +ICU_LINK_OPTS= /LIBPATH:"\$(ICU_PATH)\\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in \$(ICU_PATH) +!ENDIF + +EOF + echo "" >> $out + echo "ALL_HEADER=$header" >> $out + echo "" >> $out + echo "all : $all_dep" >> $out + echo >> $out + echo "clean : $all_clean" >> $out + echo >> $out + echo "install : all" >> $out + cat $iout >> $out + echo >> $out + echo main_dir : >> $out + echo " @if not exist \"$subdir$stlport_suffix\\\$(NULL)\" mkdir $subdir$stlport_suffix" >> $out + echo "" >> $out + + cat $tout >> $out +} + +function vc6_stlp_gen() +{ + debug="no" + tout="temp" + iout="temp_install" + all_dep="main_dir" + all_clean="" + echo > $out + echo > $tout + rm -f $iout + stlport_suffix="-stlport" + + libname="libboost_regex-${subdir}-mt-sp-${boost_version}" + opts='/nologo /MT /W3 '$EH_OPTS' /O2 '$PROC_OPTS' /GF /Gy /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D_MT /DWIN32 /DNDEBUG /D_MBCS /D_LIB '"$release_extra"' /c' + vc6_gen_lib + + debug="true" + libname="libboost_regex-${subdir}-mt-sgdp-${boost_version}" + opts='/nologo /MTd /W3 /Gm '$EH_OPTS' /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB '"$debug_extra"' /c' + #vc6_gen_lib + + libname="boost_regex-${subdir}-mt-gdp-${boost_version}" + opts='/nologo /MDd /W3 /Gm '$EH_OPTS' /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL '"$debug_extra"' /c' + #vc6_gen_dll + + debug="no" + opts='/nologo /MD /W3 '$EH_OPTS' /O2 '$PROC_OPTS' /GF /I"$(STLPORT_PATH)\stlport" /Gy /I../../../ /DBOOST_REGEX_DYN_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL '"$release_extra"' /c' + libname="boost_regex-${subdir}-mt-p-${boost_version}" + vc6_gen_dll + + debug="no" + opts='/nologo /MD /W3 '$EH_OPTS' /O2 '$PROC_OPTS' /GF /Gy /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /DNDEBUG /DWIN32 /D_WINDOWS /D_MBCS /D_USRDLL '"$release_extra"' /c' + libname="libboost_regex-${subdir}-mt-p-${boost_version}" + vc6_gen_lib + + debug="true" + libname="libboost_regex-${subdir}-mt-gdp-${boost_version}" + opts='/nologo /MDd /W3 /Gm '$EH_OPTS' /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL '"$debug_extra"' /c' + #vc6_gen_lib + +# debug STLPort mode: + debug="yes" + opts='/nologo /MDd /W3 /Gm '$EH_OPTS' /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_DYN_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL '"$debug_extra"' /c' + libname="boost_regex-${subdir}-mt-gdp-${boost_version}" + vc6_gen_dll + libname="libboost_regex-${subdir}-mt-sgdp-${boost_version}" + opts='/nologo /MTd /W3 /Gm '$EH_OPTS' /Zi /Od /I"$(STLPORT_PATH)\stlport" /I..\..\..\ /D__STL_DEBUG /D_STLP_DEBUG /DWIN32 /D_MT /D_DEBUG /D_MBCS /D_LIB '"$debug_extra"' /c' + vc6_gen_lib + opts='/nologo /MDd /W3 /Gm '$EH_OPTS' /Zi /Od /I"$(STLPORT_PATH)\stlport" /I../../../ /DBOOST_REGEX_STATIC_LINK /D__STL_DEBUG /D_STLP_DEBUG /D_DEBUG /DWIN32 /D_WINDOWS /D_MBCS /DUSRDLL '"$debug_extra"' /c' + libname="libboost_regex-${subdir}-mt-gdp-${boost_version}" + vc6_gen_lib + + cat > $out << EOF +# copyright John Maddock 2006 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# auto generated makefile for VC6+STLPort +# +# usage: +# make +# brings libraries up to date +# make install +# brings libraries up to date and copies binaries to your VC6 /lib and /bin directories (recomended) +# + +# +# ICU setup: +# +ICU_PATH= +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# add additional static-library creation flags here: +# +XSFLAGS= + +!IF "\$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "\$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "\$(STLPORT_PATH)" == "" +!ERROR Variable STLPORT_PATH not set. +!ENDIF + +!IF "\$(ICU_PATH)" == "" +ICU_COMPILE_OPTS= +ICU_LINK_OPTS= +!MESSAGE Building Boost.Regex without ICU / Unicode support: +!MESSAGE Hint: set ICU_PATH on the nmake command line to point +!MESSAGE to your ICU installation if you have one. +!ELSE +ICU_COMPILE_OPTS= -DBOOST_HAS_ICU=1 -I"\$(ICU_PATH)\\include" +ICU_LINK_OPTS= /LIBPATH:"\$(ICU_PATH)\\lib" icuin.lib icuuc.lib +!MESSAGE Building Boost.Regex with ICU in \$(ICU_PATH) +!ENDIF + +EOF + echo "" >> $out + echo "ALL_HEADER=$header" >> $out + echo "" >> $out + echo "all : $all_dep" >> $out + echo >> $out + echo "clean : $all_clean" >> $out + echo >> $out + echo "install : stlport_check all" >> $out + cat $iout >> $out + echo >> $out + echo main_dir : >> $out + echo " @if not exist \"$subdir$stlport_suffix\\\$(NULL)\" mkdir $subdir$stlport_suffix" >> $out + echo "" >> $out + echo 'stlport_check : "$(STLPORT_PATH)\stlport\string"' >> $out + echo " echo" >> $out + echo "" >> $out + + cat $tout >> $out +} + + +. common.sh + +# +# options that change with compiler version: +# +EH_OPTS="/GX" +PROC_OPTS="/GB" + +# +# generate vc6 makefile: +debug_extra="$EH_OPTS" +out="vc6.mak" +subdir="vc6" +vc6_gen +# +# generate vc6-stlport makefile: +is_stlport="yes" +out="vc6-stlport.mak" +no_single="yes" +subdir="vc6" +vc6_stlp_gen +# +# generate vc7 makefile: +debug_extra="$EH_OPTS /RTC1 /Zc:wchar_t" +release_extra="/Zc:wchar_t" +is_stlport="no" +out="vc7.mak" +no_single="no" +subdir="vc7" +vc6_gen +# +# generate vc7-stlport makefile: +is_stlport="yes" +out="vc7-stlport.mak" +no_single="yes" +subdir="vc7" +vc6_stlp_gen +# +# generate vc71 makefile: +is_stlport="no" +out="vc71.mak" +no_single="no" +subdir="vc71" +vc6_gen +# +# generate vc71-stlport makefile: +is_stlport="yes" +out="vc71-stlport.mak" +no_single="yes" +subdir="vc71" +vc6_stlp_gen +# +# generate vc8 makefile: +EH_OPTS="/EHsc" +PROC_OPTS="" +debug_extra="$EH_OPTS" +is_stlport="no" +out="vc8.mak" +no_single="no" +subdir="vc80" +vc6_gen +# +# generate vc9 makefile: +build_static="no" +EH_OPTS="/EHsc" +PROC_OPTS="" +debug_extra="$EH_OPTS" +is_stlport="no" +out="vc9.mak" +no_single="no" +subdir="vc90" +vc6_gen +# +# generate vc10 makefile: +build_static="no" +EH_OPTS="/EHsc" +PROC_OPTS="" +debug_extra="$EH_OPTS" +is_stlport="no" +out="vc10.mak" +no_single="no" +subdir="vc100" +vc6_gen + + +# +# remove tmep files; +rm -f $tout $iout + + + diff --git a/libs/regex/doc/Jamfile.v2 b/libs/regex/doc/Jamfile.v2 new file mode 100644 index 0000000000..47757c1a1c --- /dev/null +++ b/libs/regex/doc/Jamfile.v2 @@ -0,0 +1,55 @@ + +# Copyright John Maddock 2005. Use, modification, and distribution are +# subject to the Boost Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +using quickbook ; + +path-constant boost-images : ../../../doc/src/images ; + +xml regex : regex.qbk ; +boostbook standalone + : + regex + : + # HTML options first: + # Use graphics not text for navigation: + <xsl:param>navig.graphics=1 + # How far down we chunk nested sections, basically all of them: + <xsl:param>chunk.section.depth=10 + # Don't put the first section on the same page as the TOC: + <xsl:param>chunk.first.sections=1 + # How far down sections get TOC's + <xsl:param>toc.section.depth=10 + # Max depth in each TOC: + <xsl:param>toc.max.depth=4 + # How far down we go with TOC's + <xsl:param>generate.section.toc.level=10 + # Path for links to Boost: + <xsl:param>boost.root=../../../.. + + # PDF Options: + # TOC Generation: this is needed for FOP-0.9 and later: + <xsl:param>fop1.extensions=0 + # Or enable this if you're using XEP: + <xsl:param>xep.extensions=1 + # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9! + <xsl:param>fop.extensions=0 + # No indent on body text: + <xsl:param>body.start.indent=0pt + # Margin size: + <xsl:param>page.margin.inner=0.5in + # Margin size: + <xsl:param>page.margin.outer=0.5in + # Yes, we want graphics for admonishments: + <xsl:param>admon.graphics=1 + # Set this one for PDF generation *only*: + # default pnd graphics are awful in PDF form, + # better use SVG's instead: + <format>pdf:<xsl:param>admon.graphics.extension=".svg" + <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/ + <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/regex/doc/html + ; + + + diff --git a/libs/regex/doc/acknowledgements.qbk b/libs/regex/doc/acknowledgements.qbk new file mode 100644 index 0000000000..d35a7962b1 --- /dev/null +++ b/libs/regex/doc/acknowledgements.qbk @@ -0,0 +1,49 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:acknowledgements Acknowledgements] + +The author can be contacted at john - at - johnmaddock.co.uk; the home page for this +library is at [@http://www.boost.org www.boost.org]. + +I am indebted to [@http://www.cs.princeton.edu/~rs/ +Robert Sedgewick's "Algorithms in C++"] for forcing me to think +about algorithms and their performance, and to the folks at boost for forcing me +to think, period. + +[@http://www.boost-consulting.com/ Eric Niebler], author of Boost.Expressive and +the [@http://research.microsoft.com/projects/greta GRETA regular expression component], +has shared several important ideas, in a series of long discussions. + +Pete Becker, of [@http://www.versatilecoding.com Roundhouse Consulting, Ltd.], +has helped enormously with the standardisation +proposal language. + +The following people have all contributed useful comments or fixes: Dave Abrahams, +Mike Allison, Edan Ayal, Jayashree Balasubramanian, Jan B'''ö'''lsche, Beman Dawes, +Paul Baxter, David Bergman, David Dennerline, Edward Diener, Peter Dimov, +Robert Dunn, Fabio Forno, Tobias Gabrielsson, Rob Gillen, Marc Gregoire, Chris Hecker, +Nick Hodapp, Jesse Jones, Martin Jost, Boris Krasnovskiy, Jan Hermelink, Max Leung, +Wei-hao Lin, Jens Maurer, Richard Peters, Heiko Schmidt, Jason Shirk, Gerald Slacik, +Scobie Smith, Mike Smyth, Alexander Sokolovsky, Herv'''é''' Poirier, Michael Raykh, +Marc Recht, Scott VanCamp, Bruno Voigt, Alexey Voinov, Jerry Waldorf, Rob Ward, +Lealon Watts, John Wismar, Thomas Witt and Yuval Yosef. + +If I've missed your name off (I'm sure there are a few, just not who they are...) then +please do get in touch. + +I am also grateful to the manuals supplied with the Henry Spencer, PCRE, Perl +and GNU regular expression libraries - wherever possible I have tried to +maintain compatibility with these libraries and with the POSIX standard - +the code however is entirely my own, including any bugs! I can absolutely guarantee +that I will not fix any bugs I don't know about, so if you have any comments or +spot any bugs, please get in touch. + +[endsect] + + diff --git a/libs/regex/doc/bad_expression.qbk b/libs/regex/doc/bad_expression.qbk new file mode 100644 index 0000000000..267bc3656d --- /dev/null +++ b/libs/regex/doc/bad_expression.qbk @@ -0,0 +1,58 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:bad_expression bad_expression] + +[h4 Synopsis] + + #include <boost/pattern_except.hpp> + +The class `regex_error` defines the type of objects thrown as exceptions to +report errors during the conversion from a string representing a regular +expression to a finite state machine. + + namespace boost{ + + class regex_error : public std::runtime_error + { + public: + explicit regex_error(const std::string& s, regex_constants::error_type err, std::ptrdiff_t pos); + explicit regex_error(boost::regex_constants::error_type err); + boost::regex_constants::error_type code()const; + std::ptrdiff_t position()const; + }; + + typedef regex_error bad_pattern; // for backwards compatibility + typedef regex_error bad_expression; // for backwards compatibility + + } // namespace boost + +[h4 Description] + + regex_error(const std::string& s, regex_constants::error_type err, std::ptrdiff_t pos); + regex_error(boost::regex_constants::error_type err); + +[*Effects:] Constructs an object of class regex_error. + + boost::regex_constants::error_type code()const; + +[*Effects:] returns the error code that represents parsing error that occurred. + + std::ptrdiff_t position()const; + +[*Effects:] returns the location in the expression where parsing stopped. + +Footnotes: the choice of `std::runtime_error` as the base class for `regex_error` +is moot; depending upon how the library is used exceptions may be either +logic errors (programmer supplied expressions) or run time errors +(user supplied expressions). The library previously used `bad_pattern` +and `bad_expression` for errors, these have been replaced by the single +class `regex_error` to keep the library in synchronization with the +[tr1]. + +[endsect] diff --git a/libs/regex/doc/basic_regex.qbk b/libs/regex/doc/basic_regex.qbk new file mode 100644 index 0000000000..73816a1d08 --- /dev/null +++ b/libs/regex/doc/basic_regex.qbk @@ -0,0 +1,680 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:basic_regex basic_regex] + +[h4 Synopsis] + + #include <boost/regex.hpp> + +The template class `basic_regex` encapsulates regular expression +parsing and compilation. The class takes two template parameters: + +* `charT`: determines the character type, i.e. either `char` or `wchar_t`; +see [link boost_regex.ref.concepts.charT_concept charT concept]. +* `traits`: determines the behavior of the character type, for example which +character class names are recognized. A default traits class is provided: +`regex_traits<charT>`. See also +[link boost_regex.ref.concepts.traits_concept traits concept]. + +For ease of use there are two typedefs that define the two standard +`basic_regex` instances, unless you want to use custom traits classes or +non-standard character types (for example see +[link boost_regex.ref.non_std_strings.icu unicode support]), +you won't need to use anything other than these: + + namespace boost{ + + template <class charT, class traits = regex_traits<charT> > + class basic_regex; + + typedef basic_regex<char> regex; + typedef basic_regex<wchar_t> wregex; + + } + +The definition of `basic_regex` follows: it is based very closely on class +`basic_string`, and fulfils the requirements for a constant-container of `charT`. + + namespace boost{ + + template <class charT, class traits = regex_traits<charT> > + class basic_regex { + public: + // types: + typedef charT value_type; + typedef implementation-specific const_iterator; + typedef const_iterator iterator; + typedef charT& reference; + typedef const charT& const_reference; + typedef std::ptrdiff_t difference_type; + typedef std::size_t size_type; + typedef regex_constants::``[syntax_option_type]`` flag_type; + typedef typename traits::locale_type locale_type; + + // constants: + // main option selection: + static const regex_constants::``[syntax_option_type]`` normal + = regex_constants::normal; + static const regex_constants::``[syntax_option_type]`` ECMAScript + = normal; + static const regex_constants::``[syntax_option_type]`` JavaScript + = normal; + static const regex_constants::``[syntax_option_type]`` JScript + = normal; + static const regex_constants::``[syntax_option_type]`` basic + = regex_constants::basic; + static const regex_constants::``[syntax_option_type]`` extended + = regex_constants::extended; + static const regex_constants::``[syntax_option_type]`` awk + = regex_constants::awk; + static const regex_constants::``[syntax_option_type]`` grep + = regex_constants::grep; + static const regex_constants::``[syntax_option_type]`` egrep + = regex_constants::egrep; + static const regex_constants::``[syntax_option_type]`` sed + = basic = regex_constants::sed; + static const regex_constants::``[syntax_option_type]`` perl + = regex_constants::perl; + static const regex_constants::``[syntax_option_type]`` literal + = regex_constants::literal; + + // modifiers specific to perl expressions: + static const regex_constants::``[syntax_option_type]`` no_mod_m + = regex_constants::no_mod_m; + static const regex_constants::``[syntax_option_type]`` no_mod_s + = regex_constants::no_mod_s; + static const regex_constants::``[syntax_option_type]`` mod_s + = regex_constants::mod_s; + static const regex_constants::``[syntax_option_type]`` mod_x + = regex_constants::mod_x; + + // modifiers specific to POSIX basic expressions: + static const regex_constants::``[syntax_option_type]`` bk_plus_qm + = regex_constants::bk_plus_qm; + static const regex_constants::``[syntax_option_type]`` bk_vbar + = regex_constants::bk_vbar + static const regex_constants::``[syntax_option_type]`` no_char_classes + = regex_constants::no_char_classes + static const regex_constants::``[syntax_option_type]`` no_intervals + = regex_constants::no_intervals + + // common modifiers: + static const regex_constants::``[syntax_option_type]`` nosubs + = regex_constants::nosubs; + static const regex_constants::``[syntax_option_type]`` optimize + = regex_constants::optimize; + static const regex_constants::``[syntax_option_type]`` collate + = regex_constants::collate; + static const regex_constants::``[syntax_option_type]`` newline_alt + = regex_constants::newline_alt; + static const regex_constants::``[syntax_option_type]`` no_except + = regex_constants::newline_alt; + + // construct/copy/destroy: + explicit ``[link boost_regex.basic_regex.construct1 basic_regex]`` (); + explicit ``[link boost_regex.basic_regex.construct2 basic_regex]``(const charT* p, flag_type f = regex_constants::normal); + ``[link boost_regex.basic_regex.construct3 basic_regex]``(const charT* p1, const charT* p2, + flag_type f = regex_constants::normal); + ``[link boost_regex.basic_regex.construct4 basic_regex]``(const charT* p, size_type len, flag_type f); + ``[link boost_regex.basic_regex.construct5 basic_regex]``(const basic_regex&); + + template <class ST, class SA> + explicit ``[link boost_regex.basic_regex.construct6 basic_regex]``(const basic_string<charT, ST, SA>& p, + flag_type f = regex_constants::normal); + + template <class InputIterator> + ``[link boost_regex.basic_regex.construct7 basic_regex]``(InputIterator first, InputIterator last, + flag_type f = regex_constants::normal); + + ~basic_regex(); + ``[link boost_regex.basic_regex.opeq1 basic_regex& operator=]``(const basic_regex&); + ``[link boost_regex.basic_regex.opeq2 basic_regex& operator=]`` (const charT* ptr); + + template <class ST, class SA> + ``[link boost_regex.basic_regex.opeq3 basic_regex& operator=]`` (const basic_string<charT, ST, SA>& p); + // iterators: + ``[link boost_regex.basic_regex.subexpression std::pair<const_iterator, const_iterator> subexpression]``(size_type n) const; + ``[link boost_regex.basic_regex.begin const_iterator begin]``() const; + ``[link boost_regex.basic_regex.end const_iterator end]``() const; + // capacity: + ``[link boost_regex.basic_regex.size size_type size]``() const; + ``[link boost_regex.basic_regex.max_size size_type max_size]``() const; + ``[link boost_regex.basic_regex.empty bool empty]``() const; + ``[link boost_regex.basic_regex.mark_count size_type mark_count]``()const; + // + // modifiers: + ``[link boost_regex.basic_regex.assign1 basic_regex& assign]``(const basic_regex& that); + ``[link boost_regex.basic_regex.assign2 basic_regex& assign]``(const charT* ptr, + flag_type f = regex_constants::normal); + ``[link boost_regex.basic_regex.assign3 basic_regex& assign]``(const charT* ptr, unsigned int len, flag_type f); + + template <class string_traits, class A> + ``[link boost_regex.basic_regex.assign4 basic_regex& assign]``(const basic_string<charT, string_traits, A>& s, + flag_type f = regex_constants::normal); + + template <class InputIterator> + ``[link boost_regex.basic_regex.assign5 basic_regex& assign]``(InputIterator first, InputIterator last, + flag_type f = regex_constants::normal); + + // const operations: + ``[link boost_regex.basic_regex.flags flag_type flags]``() const; + ``[link boost_regex.basic_regex.status int status]``()const; + ``[link boost_regex.basic_regex.str basic_string<charT> str]``() const; + ``[link boost_regex.basic_regex.compare int compare]``(basic_regex&) const; + // locale: + ``[link boost_regex.basic_regex.imbue locale_type imbue]``(locale_type loc); + ``[link boost_regex.basic_regex.getloc locale_type getloc]``() const; + // swap + ``[link boost_regex.basic_regex.swap void swap]``(basic_regex&) throw(); + }; + + template <class charT, class traits> + ``[link boost_regex.basic_regex.op_eq bool operator ==]`` (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + + template <class charT, class traits> + ``[link boost_regex.basic_regex.op_ne bool operator !=]`` (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + + template <class charT, class traits> + ``[link boost_regex.basic_regex.op_lt bool operator <]`` (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + + template <class charT, class traits> + ``[link boost_regex.basic_regex.op_le bool operator <=]`` (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + + template <class charT, class traits> + ``[link boost_regex.basic_regex.op_ge bool operator >=]`` (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + + template <class charT, class traits> + ``[link boost_regex.basic_regex.op_gt bool operator >]`` (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + + template <class charT, class io_traits, class re_traits> + basic_ostream<charT, io_traits>& + ``[link boost_regex.basic_regex.op_stream operator <<]`` (basic_ostream<charT, io_traits>& os, + const basic_regex<charT, re_traits>& e); + + template <class charT, class traits> + ``[link boost_regex.basic_regex.op_swap void swap]``(basic_regex<charT, traits>& e1, + basic_regex<charT, traits>& e2); + + typedef basic_regex<char> regex; + typedef basic_regex<wchar_t> wregex; + + } // namespace boost + +[h4 Description] + +Class `basic_regex` has the following public members: + + // main option selection: + static const regex_constants::``[syntax_option_type]`` normal + = regex_constants::normal; + static const regex_constants::``[syntax_option_type]`` ECMAScript + = normal; + static const regex_constants::``[syntax_option_type]`` JavaScript + = normal; + static const regex_constants::``[syntax_option_type]`` JScript + = normal; + static const regex_constants::``[syntax_option_type]`` basic + = regex_constants::basic; + static const regex_constants::``[syntax_option_type]`` extended + = regex_constants::extended; + static const regex_constants::``[syntax_option_type]`` awk + = regex_constants::awk; + static const regex_constants::``[syntax_option_type]`` grep + = regex_constants::grep; + static const regex_constants::``[syntax_option_type]`` egrep + = regex_constants::egrep; + static const regex_constants::``[syntax_option_type]`` sed + = regex_constants::sed; + static const regex_constants::``[syntax_option_type]`` perl + = regex_constants::perl; + static const regex_constants::``[syntax_option_type]`` literal + = regex_constants::literal; + + // modifiers specific to perl expressions: + static const regex_constants::``[syntax_option_type]`` no_mod_m + = regex_constants::no_mod_m; + static const regex_constants::``[syntax_option_type]`` no_mod_s + = regex_constants::no_mod_s; + static const regex_constants::``[syntax_option_type]`` mod_s + = regex_constants::mod_s; + static const regex_constants::``[syntax_option_type]`` mod_x + = regex_constants::mod_x; + + // modifiers specific to POSIX basic expressions: + static const regex_constants::``[syntax_option_type]`` bk_plus_qm + = regex_constants::bk_plus_qm; + static const regex_constants::``[syntax_option_type]`` bk_vbar + = regex_constants::bk_vbar + static const regex_constants::``[syntax_option_type]`` no_char_classes + = regex_constants::no_char_classes + static const regex_constants::``[syntax_option_type]`` no_intervals + = regex_constants::no_intervals + + // common modifiers: + static const regex_constants::``[syntax_option_type]`` nosubs + = regex_constants::nosubs; + static const regex_constants::``[syntax_option_type]`` optimize + = regex_constants::optimize; + static const regex_constants::``[syntax_option_type]`` collate + = regex_constants::collate; + static const regex_constants::``[syntax_option_type]`` newline_alt + = regex_constants::newline_alt; + +The meaning of these options is documented in the [syntax_option_type] +section. + +The static constant members are provided as synonyms for the constants declared +in namespace `boost::regex_constants`; for each constant of type [syntax_option_type] +declared in namespace `boost::regex_constants` then a constant with the same name, +type and value is declared within the scope of basic_regex. + +[#boost_regex.basic_regex.construct1] + + basic_regex(); + +[*Effects]: Constructs an object of class `basic_regex`. + +[table basic_regex default construction postconditions +[[Element][Value]] +[[`empty()`][`true`]] +[[`size()`][`0`]] +[[`str()`][`basic_string<charT>()`]] +] + +[#boost_regex.basic_regex.construct2] + + basic_regex(const charT* p, flag_type f = regex_constants::normal); + +[*Requires]: /p/ shall not be a null pointer. + +[*Throws]: [bad_expression] if /p/ is not a valid regular expression, +unless the flag `no_except` is set in /f/. + +[*Effects]: Constructs an object of class [basic_regex]; the object's internal +finite state machine is constructed from the regular expression contained +in the null-terminated string /p/, and interpreted according to the +[link boost_regex.ref.syntax_option_type option +flags] specified in /f/. + +[table Postconditions for basic_regex construction +[[Element][Value]] +[[`empty()`][`false`]] +[[`size()`][`char_traits<charT>::length(p)`]] +[[`str()`][`basic_string<charT>(p)`]] +[[`flags()`][['f]]] +[[`mark_count()`][The number of marked sub-expressions within the expression.]] +] + +[#boost_regex.basic_regex.construct3] + + basic_regex(const charT* p1, const charT* p2, + flag_type f = regex_constants::normal); + +[*Requires]: /p1/ and /p2/ are not null pointers, `p1 < p2`. + +[*Throws]: bad_expression if \[p1,p2) is not a valid regular expression, unless +the flag `no_except` is set in /f/. + +[*Effects]: Constructs an object of class [basic_regex]; the object's +internal finite state machine is constructed from the regular expression +contained in the sequence of characters \[p1,p2), and interpreted according the +[link boost_regex.ref.syntax_option_type option flags] specified in /f/. + +[table Postconditions for basic_regex construction +[[Element][Value]] +[[`empty()`][`false`]] +[[`size()`][`std::distance(p1,p2)`]] +[[`str()`][`basic_string<charT>(p1,p2)`]] +[[`flags()`][['f]]] +[[`mark_count()`][The number of marked sub-expressions within the expression.]] +] + +[#boost_regex.basic_regex.construct4] + + basic_regex(const charT* p, size_type len, flag_type f); + +[*Requires]: /p/ shall not be a null pointer, `len < max_size()`. + +[*Throws]: [bad_expression] if /p/ is not a valid regular expression, unless +the flag `no_except` is set in /f/. + +[*Effects]: Constructs an object of class [basic_regex]; the object's +internal finite state machine is constructed from the regular expression +contained in the sequence of characters \[p, p+len), and interpreted +according the option flags specified in /f/. + +[table Postconditions for basic_regex construction +[[Element][Value]] +[[`empty()`][`false`]] +[[`size()`][['len]]] +[[`str()`][`basic_string<charT>(p, len)`]] +[[`flags()`][['f]]] +[[`mark_count()`][The number of marked sub-expressions within the expression.]] +] + +[#boost_regex.basic_regex.construct5] + + basic_regex(const basic_regex& e); + +[*Effects]: Constructs an object of class [basic_regex] as a copy of the object +/e/. + +[#boost_regex.basic_regex.construct6] + + template <class ST, class SA> + basic_regex(const basic_string<charT, ST, SA>& s, + flag_type f = regex_constants::normal); + +[*Throws]: [bad_expression] if /s/ is not a valid regular expression, +unless the flag `no_except` is set in /f/. + +[*Effects]: Constructs an object of class [basic_regex]; the object's +internal finite state machine is constructed from the regular expression +contained in the string /s/, and interpreted according to the [link boost_regex.ref.syntax_option_type option +flags] specified in /f/. + +[table Postconditions for basic_regex construction +[[Element][Value]] +[[`empty()`][`false`]] +[[`size()`][`s.size()`]] +[[`str()`][['s]]] +[[`flags()`][['f]]] +[[`mark_count()`][The number of marked sub-expressions within the expression.]] +] + +[#boost_regex.basic_regex.construct7] + + template <class ForwardIterator> + basic_regex(ForwardIterator first, ForwardIterator last, + flag_type f = regex_constants::normal); + +[*Throws]: [bad_expression] if the sequence \[first, last) is not a valid +regular expression, unless the flag `no_except` is set in /f/. + +[*Effects]: Constructs an object of class [basic_regex]; the object's +internal finite state machine is constructed from the regular expression +contained in the sequence of characters \[first, last), and interpreted +according to the [link boost_regex.ref.syntax_option_type option flags] specified in /f/. + +[table Postconditions for basic_regex construction +[[Element][Value]] +[[`empty()`][`false`]] +[[`size()`][`distance(first,last)`]] +[[`str()`][`basic_string<charT>(first,last)`]] +[[`flags()`][['f]]] +[[`mark_count()`][The number of marked sub-expressions within the expression.]] +] + +[#boost_regex.basic_regex.opeq1] + + basic_regex& operator=(const basic_regex& e); + +[*Effects]: Returns the result of `assign(e.str(), e.flags())`. + +[#boost_regex.basic_regex.opeq2] + + basic_regex& operator=(const charT* ptr); + +[*Requires]: /p/ shall not be a null pointer. + +[*Effects]: Returns the result of `assign(ptr)`. + +[#boost_regex.basic_regex.opeq3] + + template <class ST, class SA> + basic_regex& operator=(const basic_string<charT, ST, SA>& p); + +[*Effects]: Returns the result of `assign(p)`. + +[#boost_regex.basic_regex.subexpression] + + std::pair<const_iterator, const_iterator> subexpression(size_type n) const; + +[*Effects]: Returns a pair of iterators denoting the location of +marked subexpression /n/ within the original regular expression string. +The returned iterators are relative to `begin()` and `end()`. + +[*Requires]: The expression must have been compiled with the +[syntax_option_type] save_subexpression_location set. Argument +/n/ must be in within the range `1 <= n < mark_count()`. + +[#boost_regex.basic_regex.begin] + + const_iterator begin() const; + +[*Effects]: Returns a starting iterator to a sequence of characters representing +the regular expression. + +[#boost_regex.basic_regex.end] + + const_iterator end() const; + +[*Effects]: Returns termination iterator to a sequence of characters representing +the regular expression. + +[#boost_regex.basic_regex.size] + + size_type size() const; + +[*Effects]: Returns the length of the sequence of characters representing the regular expression. + +[#boost_regex.basic_regex.max_size] + + size_type max_size() const; + +[*Effects]: Returns the maximum length of the sequence of characters representing +the regular expression. + +[#boost_regex.basic_regex.empty] + + bool empty() const; + +[*Effects]: Returns true if the object does not contain a valid regular expression, +otherwise false. + +[#boost_regex.basic_regex.mark_count] + + size_type mark_count() const; + +[*Effects]: Returns the number of marked sub-expressions within the regular expresion. + +[#boost_regex.basic_regex.assign1] + + basic_regex& assign(const basic_regex& that); + +[*Effects]: Returns [link boost_regex.basic_regex.assign4 `assign(that.str(), that.flags())`]. + +[#boost_regex.basic_regex.assign2] + + basic_regex& assign(const charT* ptr, flag_type f = regex_constants::normal); + +[*Effects]: Returns [link boost_regex.basic_regex.assign4 `assign(string_type(ptr), f)`]. + +[#boost_regex.basic_regex.assign3] + + basic_regex& assign(const charT* ptr, unsigned int len, flag_type f); + +[*Effects]: Returns [link boost_regex.basic_regex.assign4 `assign(string_type(ptr, len), f)`]. + +[#boost_regex.basic_regex.assign4] + + template <class string_traits, class A> + basic_regex& assign(const basic_string<charT, string_traits, A>& s, + flag_type f = regex_constants::normal); + +[*Throws]: [bad_expression] if /s/ is not a valid regular expression, +unless the flag `no_except` is set in /f/. + +[*Returns]: *this. + +[*Effects]: Assigns the regular expression contained in the string /s/, +interpreted according the [link boost_regex.ref.syntax_option_type option flags] +specified in /f/. + +[table Postconditions for basic_regex::assign +[[Element][Value]] +[[`empty()`][`false`]] +[[`size()`][`s.size()`]] +[[`str()`][['s]]] +[[`flags()`][['f]]] +[[`mark_count()`][The number of marked sub-expressions within the expression.]] +] + +[#boost_regex.basic_regex.assign5] + + template <class InputIterator> + basic_regex& assign(InputIterator first, InputIterator last, + flag_type f = regex_constants::normal); + +[*Requires]: The type `InputIterator` corresponds to the +[@http://input_iterator Input Iterator requirements +(24.1.1)]. + +[*Effects]: Returns [link boost_regex.basic_regex.assign4 `assign(string_type(first, last), f)`]. + +[#boost_regex.basic_regex.flags] + + flag_type flags() const; + +[*Effects]: Returns a copy of the [link boost_regex.ref.syntax_option_type +regular expression syntax flags] that were passed to the object's constructor, +or the last call to `assign`. + +[#boost_regex.basic_regex.status] + + int status() const; + +[*Effects]: Returns zero if the expression contains a valid regular expression, +otherwise an error code. This member function is retained for use in +environments that cannot use exception handling. + +[#boost_regex.basic_regex.str] + + basic_string<charT> str() const; + +[*Effects]: Returns a copy of the character sequence passed to the object's constructor, +or the last call to assign. + +[#boost_regex.basic_regex.compare] + + int compare(basic_regex& e)const; + +[*Effects]: If `flags() == e.flags()` then returns `str().compare(e.str())`, +otherwise returns `flags() - e.flags()`. + +[#boost_regex.basic_regex.imbue] + + locale_type imbue(locale_type l); + +[*Effects]: Returns the result of `traits_inst.imbue(l)` where `traits_inst` is +a (default initialized) instance of the template parameter `traits` stored +within the object. Calls to `imbue` invalidate any currently contained +regular expression. + +[*Postcondition]: `empty() == true`. + +[#boost_regex.basic_regex.getloc] + + locale_type getloc() const; + +[*Effects]: Returns the result of `traits_inst.getloc()` where `traits_inst` is +a (default initialized) instance of the template parameter traits stored +within the object. + +[#boost_regex.basic_regex.swap] + + void swap(basic_regex& e) throw(); + +[*Effects]: Swaps the contents of the two regular expressions. + +[*Postcondition]: `*this` contains the regular expression that was in /e/, /e/ contains +the regular expression that was in `*this`. + +[*Complexity]: constant time. + +[note Comparisons between [basic_regex] objects are provided on an +experimental basis: please note that these are not present in the [tr1], +so use with care if you are writing code that may need to be ported +to other implementations of [basic_regex].] + +[#boost_regex.basic_regex.op_eq] + + template <class charT, class traits> + bool operator == (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + +[*Effects]: Returns `lhs.compare(rhs) == 0`. + +[#boost_regex.basic_regex.op_ne] + + template <class charT, class traits> + bool operator != (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + +[*Effects]: Returns `lhs.compare(rhs) != 0`. + +[#boost_regex.basic_regex.op_lt] + + template <class charT, class traits> + bool operator < (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + +[*Effects]: Returns `lhs.compare(rhs) < 0`. + +[#boost_regex.basic_regex.op_le] + + template <class charT, class traits> + bool operator <= (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + +[*Effects]: Returns `lhs.compare(rhs) <= 0`. + +[#boost_regex.basic_regex.op_ge] + + template <class charT, class traits> + bool operator >= (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + +[*Effects]: Returns `lhs.compare(rhs) >= 0`. + +[#boost_regex.basic_regex.op_gt] + + template <class charT, class traits> + bool operator > (const basic_regex<charT, traits>& lhs, + const basic_regex<charT, traits>& rhs); + +[*Effects]: Returns `lhs.compare(rhs) > 0`. + +[note The basic_regex stream inserter is provided on an experimental basis, +and outputs the textual representation of the expression to the stream.] + +[#boost_regex.basic_regex.op_stream] + + template <class charT, class io_traits, class re_traits> + basic_ostream<charT, io_traits>& + operator << (basic_ostream<charT, io_traits>& os + const basic_regex<charT, re_traits>& e); + +[*Effects]: Returns `(os << e.str())`. + +[#boost_regex.basic_regex.op_swap] + + template <class charT, class traits> + void swap(basic_regex<charT, traits>& lhs, + basic_regex<charT, traits>& rhs); + +[*Effects]: calls `lhs.swap(rhs)`. + +[endsect] + diff --git a/libs/regex/doc/captures.qbk b/libs/regex/doc/captures.qbk new file mode 100644 index 0000000000..08abbf9d84 --- /dev/null +++ b/libs/regex/doc/captures.qbk @@ -0,0 +1,200 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:captures Understanding Marked Sub-Expressions and Captures] + +Captures are the iterator ranges that are "captured" by marked +sub-expressions as a regular expression gets matched. Each marked +sub-expression can result in more than one capture, if it is matched +more than once. This document explains how captures and marked +sub-expressions in Boost.Regex are represented and accessed. + +[h4 Marked sub-expressions] + +Every time a Perl regular expression contains a parenthesis group `()`, it +spits out an extra field, known as a marked sub-expression, +for example the expression: + +[pre (\w+)\W+(\w+)] + +Has two marked sub-expressions (known as $1 and $2 respectively), in +addition the complete match is known as $&, everything before the +first match as $\`, and everything after the match as $'. So +if the above expression is searched for within `"@abc def--"`, then we obtain: + +[table +[[Sub-expression][Text found]] +[[$\`]["@"]] +[[$&]["abc def"]] +[[$1]["abc"]] +[[$2]["def"]] +[[$']["--"]] +] + +In Boost.Regex all these are accessible via the [match_results] class that +gets filled in when calling one of the regular expression matching algorithms +([regex_search], [regex_match], or [regex_iterator]). So given: + + boost::match_results<IteratorType> m; + +The Perl and Boost.Regex equivalents are as follows: + +[table +[[Perl][Boost.Regex]] +[[$\`][`m.prefix()`]] +[[$&][`m[0]`]] +[[$n][`m[n]`]] +[[$\'][`m.suffix()`]] +] + +In Boost.Regex each sub-expression match is represented by a [sub_match] object, +this is basically just a pair of iterators denoting the start and end +position of the sub-expression match, but there are some additional +operators provided so that objects of type [sub_match] behave a lot like a +`std::basic_string`: for example they are implicitly convertible to a +`basic_string`, they can be compared to a string, added to a string, or +streamed out to an output stream. + +[h4 Unmatched Sub-Expressions] + +When a regular expression match is found there is no need for all of the +marked sub-expressions to have participated in the match, for example the expression: + +[pre (abc)|(def)] + +can match either $1 or $2, but never both at the same time. In Boost.Regex +you can determine which sub-expressions matched by accessing the +`sub_match::matched` data member. + +[h4 Repeated Captures] + +When a marked sub-expression is repeated, then the sub-expression gets +"captured" multiple times, however normally only the final capture is available, +for example if + +[pre (?:(\w+)\W+)+] + +is matched against + +[pre one fine day] + +Then $1 will contain the string "day", and all the previous captures will have +been forgotten. + +However, Boost.Regex has an experimental feature that allows all the capture +information to be retained - this is accessed either via the +`match_results::captures` member function or the `sub_match::captures` member +function. These functions return a container that contains a sequence of all +the captures obtained during the regular expression matching. The following +example program shows how this information may be used: + + #include <boost/regex.hpp> + #include <iostream> + + void print_captures(const std::string& regx, const std::string& text) + { + boost::regex e(regx); + boost::smatch what; + std::cout << "Expression: \"" << regx << "\"\n"; + std::cout << "Text: \"" << text << "\"\n"; + if(boost::regex_match(text, what, e, boost::match_extra)) + { + unsigned i, j; + std::cout << "** Match found **\n Sub-Expressions:\n"; + for(i = 0; i < what.size(); ++i) + std::cout << " $" << i << " = \"" << what[i] << "\"\n"; + std::cout << " Captures:\n"; + for(i = 0; i < what.size(); ++i) + { + std::cout << " $" << i << " = {"; + for(j = 0; j < what.captures(i).size(); ++j) + { + if(j) + std::cout << ", "; + else + std::cout << " "; + std::cout << "\"" << what.captures(i)[j] << "\""; + } + std::cout << " }\n"; + } + } + else + { + std::cout << "** No Match found **\n"; + } + } + + int main(int , char* []) + { + print_captures("(([[:lower:]]+)|([[:upper:]]+))+", "aBBcccDDDDDeeeeeeee"); + print_captures("(.*)bar|(.*)bah", "abcbar"); + print_captures("(.*)bar|(.*)bah", "abcbah"); + print_captures("^(?:(\\w+)|(?>\\W+))*$", + "now is the time for all good men to come to the aid of the party"); + return 0; + } + +Which produces the following output: + +[pre +Expression: "(([[:lower:\]\]+)|([[:upper:\]\]+))+" +Text: "aBBcccDDDDDeeeeeeee" +'''**''' Match found '''**''' + Sub-Expressions: + $0 = "aBBcccDDDDDeeeeeeee" + $1 = "eeeeeeee" + $2 = "eeeeeeee" + $3 = "DDDDD" + Captures: + $0 = { "aBBcccDDDDDeeeeeeee" } + $1 = { "a", "BB", "ccc", "DDDDD", "eeeeeeee" } + $2 = { "a", "ccc", "eeeeeeee" } + $3 = { "BB", "DDDDD" } +Expression: "(.'''*''')bar|(.'''*''')bah" +Text: "abcbar" +'''**''' Match found '''**''' + Sub-Expressions: + $0 = "abcbar" + $1 = "abc" + $2 = "" + Captures: + $0 = { "abcbar" } + $1 = { "abc" } + $2 = { } +Expression: "(.'''*''')bar|(.'''*''')bah" +Text: "abcbah" +'''**''' Match found '''**''' + Sub-Expressions: + $0 = "abcbah" + $1 = "" + $2 = "abc" + Captures: + $0 = { "abcbah" } + $1 = { } + $2 = { "abc" } +Expression: "^(?:(\w+)|(?>\W+))'''*$'''" +Text: "now is the time for all good men to come to the aid of the party" +'''**''' Match found '''**''' + Sub-Expressions: + $0 = "now is the time for all good men to come to the aid of the party" + $1 = "party" + Captures: + $0 = { "now is the time for all good men to come to the aid of the party" } + $1 = { "now", "is", "the", "time", "for", "all", "good", "men", "to", + "come", "to", "the", "aid", "of", "the", "party" } +] + +Unfortunately enabling this feature has an impact on performance +(even if you don't use it), and a much bigger impact if you do use it, +therefore to use this feature you need to: + +* Define BOOST_REGEX_MATCH_EXTRA for all translation units including the library source (the best way to do this is to uncomment this define in boost/regex/user.hpp and then rebuild everything. +* Pass the match_extra flag to the particular algorithms where you actually need the captures information (regex_search, regex_match, or regex_iterator). + +[endsect] + diff --git a/libs/regex/doc/character_class_names.qbk b/libs/regex/doc/character_class_names.qbk new file mode 100644 index 0000000000..e4771aa53c --- /dev/null +++ b/libs/regex/doc/character_class_names.qbk @@ -0,0 +1,92 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:character_classes Character Class Names] + +[section:std_char_clases Character Classes that are Always Supported] + +The following character class names are always supported by Boost.Regex: + +[table +[[Name] [POSIX-standard name] [Description]] +[[alnum] [Yes] [Any alpha-numeric character.]] +[[alpha] [Yes] [Any alphabetic character.]] +[[blank] [Yes] [Any whitespace character that is not a line separator.]] +[[cntrl] [Yes] [Any control character.]] +[[d] [No] [Any decimal digit]] +[[digit] [Yes] [Any decimal digit.]] +[[graph] [Yes] [Any graphical character.]] +[[l] [No] [Any lower case character.]] +[[lower] [Yes] [Any lower case character.]] +[[print] [Yes] [Any printable character.]] +[[punct] [Yes] [Any punctuation character.]] +[[s] [No] [Any whitespace character.]] +[[space] [Yes] [Any whitespace character.]] +[[unicode] [No] [Any extended character whose code point is above 255 in value.]] +[[u] [No] [Any upper case character.]] +[[upper] [Yes] [Any upper case character.]] +[[w] [No] [Any word character (alphanumeric characters plus the underscore).]] +[[word] [No] [Any word character (alphanumeric characters plus the underscore).]] +[[xdigit] [Yes] [Any hexadecimal digit character.]] +] + +[endsect] + +[section:optional_char_class_names Character classes that are supported by Unicode Regular Expressions] + +The following character classes are only supported by Unicode Regular Expressions: +that is those that use the `u32regex` type. The names used are the same as +those from Chapter 4 of the Unicode standard. + +[table +[[Short Name] [Long Name]] +[[ ] [ASCII]] +[[ ] [Any]] +[[ ] [Assigned]] +[[C*] [Other]] +[[Cc] [Control]] +[[Cf] [Format]] +[[Cn] [Not Assigned]] +[[Co] [Private Use]] +[[Cs] [Surrogate]] +[[L*] [Letter]] +[[Ll] [Lowercase Letter]] +[[Lm] [Modifier Letter]] +[[Lo] [Other Letter]] +[[Lt] [Titlecase]] +[[Lu] [Uppercase Letter]] +[[M*] [Mark]] +[[Mc] [Spacing Combining Mark]] +[[Me] [Enclosing Mark]] +[[Mn] [Non-Spacing Mark]] +[[N*] [Number]] +[[Nd] [Decimal Digit Number]] +[[Nl] [Letter Number]] +[[No] [Other Number]] +[[P*] [Punctuation]] +[[Pc] [Connector Punctuation]] +[[Pd] [Dash Punctuation]] +[[Pe] [Close Punctuation]] +[[Pf] [Final Punctuation]] +[[Pi] [Initial Punctuation]] +[[Po] [Other Punctuation]] +[[Ps] [Open Punctuation]] +[[S*] [Symbol]] +[[Sc] [Currency Symbol]] +[[Sk] [Modifier Symbol]] +[[Sm] [Math Symbol]] +[[So] [Other Symbol]] +[[Z*] [Separator]] +[[Zl] [Line Separator]] +[[Zp] [Paragraph Separator]] +[[Zs] [Space Separator]] +] + +[endsect] +[endsect] + diff --git a/libs/regex/doc/collating_names.qbk b/libs/regex/doc/collating_names.qbk new file mode 100644 index 0000000000..6f7aab97be --- /dev/null +++ b/libs/regex/doc/collating_names.qbk @@ -0,0 +1,128 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:collating_names Collating Names] + +[section:digraphs Digraphs] + +The following are treated as valid digraphs when used as a collating name: + +"ae", "Ae", "AE", "ch", "Ch", "CH", "ll", "Ll", "LL", "ss", "Ss", "SS", "nj", "Nj", "NJ", "dz", "Dz", "DZ", "lj", "Lj", "LJ". + +So for example the expression: + +[pre \[\[.ae.\]-c\] ] + +will match any character that collates between the digraph "ae" and the character "c". + +[endsect] + +[section:posix_symbolic_names POSIX Symbolic Names] + +The following symbolic names are recognised as valid collating element names, +in addition to any single character, this allows you to write for example: + +[pre \[\[.left-square-bracket.\]\[.right-square-bracket.\]\]] + +if you wanted to match either "\[" or "\]". + +[table +[[Name][Character]] +[[NUL] [\\x00]] +[[SOH] [\\x01]] +[[STX] [\\x02]] +[[ETX] [\\x03]] +[[EOT] [\\x04]] +[[ENQ] [\\x05]] +[[ACK] [\\x06]] +[[alert] [\\x07]] +[[backspace] [\\x08]] +[[tab] [\\t]] +[[newline] [\\n]] +[[vertical-tab] [\\v]] +[[form-feed] [\\f]] +[[carriage-return] [\\r]] +[[SO] [\\xE]] +[[SI] [\\xF]] +[[DLE] [\\x10]] +[[DC1] [\\x11]] +[[DC2] [\\x12]] +[[DC3] [\\x13]] +[[DC4] [\\x14]] +[[NAK] [\\x15]] +[[SYN] [\\x16]] +[[ETB] [\\x17]] +[[CAN] [\\x18]] +[[EM] [\\x19]] +[[SUB] [\\x1A]] +[[ESC] [\\x1B]] +[[IS4] [\\x1C]] +[[IS3] [\\x1D]] +[[IS2] [\\x1E]] +[[IS1] [\\x1F]] +[[space] [\\x20]] +[[exclamation-mark] [!]] +[[quotation-mark] ["]] +[[number-sign] [#]] +[[dollar-sign] [$]] +[[percent-sign] [%]] +[[ampersand] [&]] +[[apostrophe] [\']] +[[left-parenthesis] [(]] +[[right-parenthesis] [)]] +[[asterisk] [\*]] +[[plus-sign] [+]] +[[comma] [,]] +[[hyphen] [-]] +[[period] [.]] +[[slash] [ / ]] +[[zero] [0]] +[[one] [1]] +[[two] [2]] +[[three] [3]] +[[four] [4]] +[[five] [5]] +[[six] [6]] +[[seven] [7]] +[[eight] [8]] +[[nine] [9]] +[[colon] [\:]] +[[semicolon] [;]] +[[less-than-sign] [<]] +[[equals-sign] [=]] +[[greater-than-sign] [>]] +[[question-mark] [?]] +[[commercial-at] [@]] +[[left-square-bracket] [\[]] +[[backslash][\\]] +[[right-square-bracket][\]]] +[[circumflex][~]] +[[underscore][_]] +[[grave-accent][`]] +[[left-curly-bracket][{]] +[[vertical-line][|]] +[[right-curly-bracket][}]] +[[tilde][~]] +[[DEL][\\x7F]] +] + +[endsect] + +[section:named_unicode Named Unicode Characters] + +When using [link boost_regex.unicode Unicode aware regular expressions] (with the `u32regex` type), all +the normal symbolic names for Unicode characters (those given in Unidata.txt) +are recognised. So for example: + +[pre \[\[.CYRILLIC CAPITAL LETTER I.\]\] ] + +would match the Unicode character 0x0418. + +[endsect] +[endsect] + diff --git a/libs/regex/doc/concepts.qbk b/libs/regex/doc/concepts.qbk new file mode 100644 index 0000000000..d6758967ff --- /dev/null +++ b/libs/regex/doc/concepts.qbk @@ -0,0 +1,107 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:concepts Concepts] + +[section:charT_concept charT Requirements] + +Type `charT` used a template argument to class template [basic_regex], +must have a trivial default constructor, copy constructor, +assignment operator, and destructor. In addition the following requirements +must be met for objects; /c/ of type `charT`, /c1/ and /c2/ of type `charT const`, +and /i/ of type `int`: + +[table +[[Expression] [Return type] [Assertion / Note / Pre- / Post-condition]] +[[charT c] [charT] [Default constructor (must be trivial).]] +[[charT c(c1)] [charT] [Copy constructor (must be trivial).]] +[[c1 = c2] [charT] [Assignment operator (must be trivial).]] +[[c1 == c2] [bool] [true if c1 has the same value as c2.]] +[[c1 != c2] [bool] [true if c1 and c2 are not equal.]] +[[c1 < c2] [bool] [true if the value of c1 is less than c2.]] +[[c1 > c2] [bool] [true if the value of c1 is greater than c2.]] +[[c1 <= c2] [bool] [true if c1 is less than or equal to c2.]] +[[c1 >= c2] [bool] [true if c1 is greater than or equal to c2.]] +[[intmax_t i = c1] [int ] [charT must be convertible to an integral type. + +Note: type charT is not required to support this operation, if the traits class used supports the full Boost-specific interface, rather than the minimal standardised-interface (see traits class requirements below).]] +[[charT c(i);] [charT] [charT must be constructable from an integral type.]] +] + +[endsect] + +[section:traits_concept Traits Class Requirements] + +There are two sets of requirements for the `traits` template argument to +[basic_regex]: a mininal interface (which is part of the regex standardization proposal), +and an optional Boost-specific enhanced interface. + +[h4 Minimal requirements.] + +In the following table `X` denotes a traits class defining types and functions for +the character container type `charT`; /u/ is an object of type `X`; /v/ is +an object of type `const X`; /p/ is a value of type `const charT*`; +/I1/ and /I2/ are Input Iterators; /c/ is a value of type `const charT`; +/s/ is an object of type `X::string_type`; /cs/ is an object of type +`const X::string_type`; /b/ is a value of type `bool`; /I/ is a value of +type `int`; /F1/ and /F2/ are values of type `const charT*`; and /loc/ is +an object of type `X::locale_type`. + +[table +[[Expression][Return type][Assertion / Note Pre / Post condition]] +[[X::char_type][charT][The character container type used in the implementation of class template basic_regex.]] +[[X::size_type][][An unsigned integer type, capable of holding the length of a null-terminated string of charT's.]] +[[X::string_type][std::basic_string<charT> or std::vector<charT>][]] +[[X::locale_type][Implementation defined][A copy constructible type that represents the locale used by the traits class.]] +[[X::char_class_type][Implementation defined][A bitmask type representing a particular character classification. Multiple values of this type can be bitwise-or'ed together to obtain a new valid value.]] +[[X::length(p)][X::size_type][Yields the smallest i such that p\[i\] == 0. Complexity is linear in i.]] +[[v.translate(c)][X::char_type][Returns a character such that for any character d that is to be considered equivalent to c then v.translate(c) == v.translate(d).]] +[[v.translate_nocase(c)][X::char_type][For all characters C that are to be considered equivalent to c when comparisons are to be performed without regard to case, then v.translate_nocase(c) == v.translate_nocase(C).]] +[[v.transform(F1, F2)][X::string_type][Returns a sort key for the character sequence designated by the iterator range \[F1, F2) such that if the character sequence \[G1, G2) sorts before the character sequence [H1, H2) then v.transform(G1, G2) < v.transform(H1, H2). ]] +[[v.transform_primary(F1, F2)][X::string_type][Returns a sort key for the character sequence designated by the iterator range \[F1, F2) such that if the character sequence [G1, G2) sorts before the character sequence \[H1, H2) when character case is not considered then v.transform_primary(G1, G2) < v.transform_primary(H1, H2).]] +[[v.lookup_classname(F1, F2)][X::char_class_type][Converts the character sequence designated by the iterator range \[F1,F2) into a bitmask type that can subsequently be passed to isctype. Values returned from lookup_classname can be safely bitwise or'ed together. Returns 0 if the character sequence is not the name of a character class recognized by X. The value returned shall be independent of the case of the characters in the sequence.]] +[[v.lookup_collatename(F1, F2)][X::string_type][Returns a sequence of characters that represents the collating element consisting of the character sequence designated by the iterator range \[F1, F2). Returns an empty string if the character sequence is not a valid collating element.]] +[[v.isctype(c, v.lookup_classname (F1, F2))][bool][Returns true if character c is a member of the character class designated by the iterator range \[F1, F2), false otherwise.]] +[[v.value(c, I)][int][Returns the value represented by the digit c in base I if the character c is a valid digit in base I; otherwise returns -1. \[Note: the value of I will only be 8, 10, or 16. -end note\]]] +[[u.imbue(loc)][X::locale_type][Imbues u with the locale loc, returns the previous locale used by u if any. ]] +[[v.getloc()][X::locale_type][Returns the current locale used by v if any. ]] +] + +[h4 Additional Optional Requirements] + +The following additional requirements are strictly optional, +however in order for [basic_regex] to take advantage of these additional +interfaces, all of the following requirements must be met; [basic_regex] +will detect the presence or absense of the member `boost_extensions_tag` and +configure itself appropriately. + + +[table +[[Expression][Result][Assertion / Note Pre / Post condition]] +[[X::boost_extensions_tag][An unspecified type.][When present, all of the extensions listed in this table must be present.]] +[[v.syntax_type(c)][regex_constants::syntax_type][Returns a symbolic value of type regex_constants::syntax_type that signifies the meaning of character c within the regular expression grammar.]] +[[v.escape_syntax_type(c)][regex_constants::escape_syntax_type][Returns a symbolic value of type regex_constants::escape_syntax_type, that signifies the meaning of character c within the regular expression grammar, when c has been preceded by an escape character. Precondition: if b is the character preceding c in the expression being parsed then: `v.syntax_type(b) == syntax_escape`]] +[[v.translate(c, b)][X::char_type][Returns a character d such that: for any character d that is to be considered equivalent to c then `v.translate(c,false)==v.translate(d,false)`. Likewise for all characters C that are to be considered equivalent to c when comparisons are to be performed without regard to case, then `v.translate(c,true)==v.translate(C,true)`.]] +[[v.toi(I1, I2, i)][An integer type capable of holding either a charT or an int.][Behaves as follows: if `p == q` or if `*p` is not a digit character then returns -1. Otherwise performs formatted numeric input on the sequence \[p,q) and returns the result as an int. Postcondition: either p == q or *p is a non-digit character.]] +[[v.error_string(I)][std::string][Returns a human readable error string for the error condition i, where i is one of the values enumerated by type regex_constants::error_type. If the value /I/ is not recognized then returns the string "Unknown error" or a localized equivalent.]] +[[v.tolower(c)][X::char_type][Converts c to lower case, used for Perl-style \l and \L formating operations.]] +[[v.toupper(c)][X::char_type][Converts c to upper case, used for Perl-style \u and \U formating operations.]] +] + +[endsect] + +[section:iterator_concepts Iterator Requirements] + +The regular expression algorithms (and iterators) take all require a +Bidirectional-Iterator. + +[endsect] + +[endsect] + + diff --git a/libs/regex/doc/configuration.qbk b/libs/regex/doc/configuration.qbk new file mode 100644 index 0000000000..411f0722de --- /dev/null +++ b/libs/regex/doc/configuration.qbk @@ -0,0 +1,87 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:configuration Configuration] + +[section:compiler Compiler Setup] + +You shouldn't need to do anything special to configure Boost.Regex for use +with your compiler - the [@../../../config/index.html Boost.Config subsystem] should already take care of it, +if you do have problems (or you are using a particularly obscure compiler +or platform) then [@../../../config/index.html Boost.Config] has a configure script that you can run. + +[endsect] + +[section:locale Locale and traits class selection] + +The following macros (see [@../../../../boost/regex/user.hpp user.hpp]) control how Boost.Regex interacts with +the user's locale: + +[table +[[macro][description]] +[[BOOST_REGEX_USE_C_LOCALE][Forces Boost.Regex to use the global C locale in its traits class support: this is now deprecated in favour of the C++ locale.]] +[[BOOST_REGEX_USE_CPP_LOCALE][Forces Boost.Regex to use std::locale in it's default traits class, regular expressions can then be imbued with an instance specific locale. This is the default behaviour on non-Windows platforms.]] +[[BOOST_REGEX_NO_W32][Tells Boost.Regex not to use any Win32 API's even when available (implies BOOST_REGEX_USE_CPP_LOCALE unless BOOST_REGEX_USE_C_LOCALE is set).]] +] + +[endsect] + + +[section:linkage Linkage Options] + +[table +[[macro][description]] +[[BOOST_REGEX_DYN_LINK][For Microsoft and Borland C++ builds, this tells Boost.Regex that it should link to the dll build of the Boost.Regex. By default boost.regex will link to its static library build, even if the dynamic C runtime library is in use.]] +[[BOOST_REGEX_NO_LIB][For Microsoft and Borland C++ builds, this tells Boost.Regex that it should not automatically select the library to link to.]] +[[BOOST_REGEX_NO_FASTCALL][For Microsoft builds, this tells Boost.Regex to use the `__cdecl` calling convention rather than `__fastcall`. Useful if you want to use the same library from both managed and unmanaged code.]] +] + +[endsect] + +[section:algorithm Algorithm Selection] + +[table +[[macro][description]] +[[BOOST_REGEX_RECURSIVE][Tells Boost.Regex to use a stack-recursive matching algorithm. This is generally the fastest option (although there is very little in it), but can cause stack overflow in extreme cases, on Win32 this can be handled safely, but this is not the case on other platforms.]] +[[BOOST_REGEX_NON_RECURSIVE][Tells Boost.Regex to use a non-stack recursive matching algorithm, this can be slightly slower than the alternative, but is always safe no matter how pathological the regular expression. This is the default on non-Win32 platforms.]] +] + +[endsect] + +[section:tuning Algorithm Tuning] + +The following option applies only if BOOST_REGEX_RECURSIVE is set. + +[table +[[macro][description]] +[[BOOST_REGEX_HAS_MS_STACK_GUARD][Tells Boost.Regex that Microsoft style __try - __except blocks are supported, and can be used to safely trap stack overflow.]] +] + + +The following options apply only if BOOST_REGEX_NON_RECURSIVE is set. + +[table +[[macro][description]] +[[BOOST_REGEX_BLOCKSIZE][In non-recursive mode, Boost.Regex uses largish blocks of memory to act as a stack for the state machine, the larger the block size then the fewer allocations that will take place. This defaults to 4096 bytes, which is large enough to match the vast majority of regular expressions without further allocations, however, you can choose smaller or larger values depending upon your platforms characteristics.]] +[[BOOST_REGEX_MAX_BLOCKS][Tells Boost.Regex how many blocks of size BOOST_REGEX_BLOCKSIZE it is permitted to use. If this value is exceeded then Boost.Regex will stop trying to find a match and throw a std::runtime_error. Defaults to 1024, don't forget to tweek this value if you alter BOOST_REGEX_BLOCKSIZE by much.]] +[[BOOST_REGEX_MAX_CACHE_BLOCKS][Tells Boost.Regex how many memory blocks to store in + it's internal cache - memory blocks are taken from this cache rather than by calling + ::operator new. Generally speeking this can be an order of magnitude faster than + calling ::opertator new each time a memory block is required, but has the + downside that Boost.Regex can end up caching a large chunk of memory (by default + up to 16 blocks each of BOOST_REGEX_BLOCKSIZE size). If memory is tight then try + defining this to 0 (disables all caching), or if that is too slow, then a value of + 1 or 2, may be sufficient. On the other hand, on large multi-processor, +multi-threaded systems, you may find that a higher value is in order.]] +] + +[endsect] + +[endsect] + + diff --git a/libs/regex/doc/error_type.qbk b/libs/regex/doc/error_type.qbk new file mode 100644 index 0000000000..7044199827 --- /dev/null +++ b/libs/regex/doc/error_type.qbk @@ -0,0 +1,63 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:error_type error_type] + +[h4 Synopsis] + +Type error type represents the different types of errors that can be raised +by the library when parsing a regular expression. + + namespace boost{ namespace regex_constants{ + + typedef implementation-specific-type error_type; + + static const error_type error_collate; + static const error_type error_ctype; + static const error_type error_escape; + static const error_type error_backref; + static const error_type error_brack; + static const error_type error_paren; + static const error_type error_brace; + static const error_type error_badbrace; + static const error_type error_range; + static const error_type error_space; + static const error_type error_badrepeat; + static const error_type error_complexity; + static const error_type error_stack; + static const error_type error_bad_pattern; + + } // namespace regex_constants + } // namespace boost + + +[h4 Description] + +The type `error_type` is an implementation-specific enumeration type that may +take one of the following values: + +[table +[[Constant][Meaning]] +[[error_collate][An invalid collating element was specified in a \[\[.name.\]\] block.]] +[[error_ctype][An invalid character class name was specified in a \[\[:name:\]\] block.]] +[[error_escape][An invalid or trailing escape was encountered.]] +[[error_backref][A back-reference to a non-existant marked sub-expression was encountered.]] +[[error_brack][An invalid character set \[...\] was encountered.]] +[[error_paren][Mismatched '(' and ')'.]] +[[error_brace][Mismatched '{' and '}'.]] +[[error_badbrace][Invalid contents of a {...} block.]] +[[error_range][A character range was invalid, for example \[d-a\].]] +[[error_space][Out of memory.]] +[[error_badrepeat][An attempt to repeat something that can not be repeated - for example a*+]] +[[error_complexity][The expression became too complex to handle.]] +[[error_stack][Out of program stack space.]] +[[error_bad_pattern][Other unspecified errors.]] +] + +[endsect] + diff --git a/libs/regex/doc/examples.qbk b/libs/regex/doc/examples.qbk new file mode 100644 index 0000000000..262e824ea0 --- /dev/null +++ b/libs/regex/doc/examples.qbk @@ -0,0 +1,128 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:examples Test and Example Programs] + +[h4 Test Programs] + +[*regress:] + +A regression test application that gives the matching/searching algorithms a +full workout. The presence of this program is your guarantee that the +library will behave as claimed - at least as far as those items tested +are concerned - if anyone spots anything that isn't being tested I'd be +glad to hear about it. + +Files: + +* [@../../test/regress/main.cpp main.cpp] +* [@../../test/regress/basic_tests.cpp basic_tests.cpp] +* [@../../test/regress/test_alt.cpp test_alt.cpp] +* [@../../test/regress/test_anchors.cpp test_anchors.cpp] +* [@../../test/regress/test_asserts.cpp test_asserts.cpp] +* [@../../test/regress/test_backrefs.cpp test_backrefs.cpp] +* [@../../test/regress/test_deprecated.cpp test_deprecated.cpp] +* [@../../test/regress/test_emacs.cpp test_emacs.cpp] +* [@../../test/regress/test_escapes.cpp test_escapes.cpp] +* [@../../test/regress/test_grep.cpp test_grep.cpp] +* [@../../test/regress/test_icu.cpp test_icu.cpp] +* [@../../test/regress/test_locale.cpp test_locale.cpp] +* [@../../test/regress/test_mfc.cpp test_mfc.cpp] +* [@../../test/regress/test_non_greedy_repeats.cpp test_non_greedy_repeats.cpp] +* [@../../test/regress/test_operators.cpp test_operators.cpp] +* [@../../test/regress/test_overloads.cpp test_overloads.cpp] +* [@../../test/regress/test_perl_ex.cpp test_perl_ex.cpp] +* [@../../test/regress/test_replace.cpp test_replace.cpp] +* [@../../test/regress/test_sets.cpp test_sets.cpp] +* [@../../test/regress/test_simple_repeats.cpp test_simple_repeats.cpp] +* [@../../test/regress/test_tricky_cases.cpp test_tricky_cases.cpp] +* [@../../test/regress/test_unicode.cpp test_unicode.cpp] + +[*bad_expression_test:] + +Verifies that "bad" regular expressions don't cause the matcher to go into +infinite loops, but to throw an exception instead. + +Files: [@../../test/pathology/bad_expression_test.cpp bad_expression_test.cpp]. + +[*recursion_test:] + +Verifies that the matcher can't overrun the stack (no matter what the expression). + +Files: [@../../test/pathology/recursion_test.cpp recursion_test.cpp]. + +[*concepts:] + +Verifies that the library meets all documented concepts (a compile only test). + +Files: [@../../test/concepts/concept_check.cpp concept_check.cpp]. + +[*captures_test:] + +Test code for captures. + +Files: [@../../test/captures/captures_test.cpp captures_test.cpp]. + +[h4 Example programs] + +[*grep] + +A simple grep implementation, run with the -h command line option to find out its usage. + +Files: [@../../example/grep/grep.cpp grep.cpp] + +[*timer.exe] + +A simple interactive expression matching application, the results of all +matches are timed, allowing the programmer to optimize their regular expressions +where performance is critical. + +Files: [@../../example/timer/regex_timer.cpp regex_timer.cpp]. + +[h4 Code snippets] + +The snippets examples contain the code examples used in the documentation: + +[@../../example/snippets/captures_example.cpp captures_example.cpp]: Demonstrates the use of captures. + +[@../../example/snippets/credit_card_example.cpp credit_card_example.cpp]: Credit card number formatting code. + +[@../../example/snippets/partial_regex_grep.cpp partial_regex_grep.cpp]: Search example using partial matches. + +[@../../example/snippets/partial_regex_match.cpp partial_regex_match.cpp]: regex_match example using partial matches. + +[@../../example/snippets/regex_iterator_example.cpp regex_iterator_example.cpp]: Iterating through a series of matches. + +[@../../example/snippets/regex_match_example.cpp regex_match_example.cpp]: ftp based regex_match example. + +[@../../example/snippets/regex_merge_example.cpp regex_merge_example.cpp]: regex_merge example: converts a C++ file to syntax highlighted HTML. + +[@../../example/snippets/regex_replace_example.cpp regex_replace_example.cpp]: regex_replace example: converts a C++ file to syntax highlighted HTML + +[@../../example/snippets/regex_search_example.cpp regex_search_example.cpp]: regex_search example: searches a cpp file for class definitions. + +[@../../example/snippets/regex_token_iterator_eg_1.cpp regex_token_iterator_eg_1.cpp]: split a string into a series of tokens. + +[@../../example/snippets/regex_token_iterator_eg_2.cpp regex_token_iterator_eg_2.cpp]: enumerate the linked URL's in a HTML file. + +The following are deprecated: + +[@../../example/snippets/regex_grep_example_1.cpp regex_grep_example_1.cpp]: regex_grep example 1: searches a cpp file for class definitions. + +[@../../example/snippets/regex_grep_example_2.cpp regex_grep_example_2.cpp]: regex_grep example 2: searches a cpp file for class definitions, using a global callback function. + +[@../../example/snippets/regex_grep_example_3.cpp regex_grep_example_3.cpp]: regex_grep example 2: searches a cpp file for class definitions, using a bound member function callback. + +[@../../example/snippets/regex_grep_example_4.cpp regex_grep_example_4.cpp]: regex_grep example 2: searches a cpp file for class definitions, using a C++ Builder closure as a callback. + +[@../../example/snippets/regex_split_example_1.cpp regex_split_example_1.cpp]: regex_split example: split a string into tokens. + +[@../../example/snippets/regex_split_example_2.cpp regex_split_example_2.cpp] : regex_split example: spit out linked URL's. + +[endsect] + diff --git a/libs/regex/doc/faq.qbk b/libs/regex/doc/faq.qbk new file mode 100644 index 0000000000..585425fb3e --- /dev/null +++ b/libs/regex/doc/faq.qbk @@ -0,0 +1,98 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:faq FAQ] + +[*Q.] I can't get regex++ to work with escape characters, what's going on? + +[*A.] If you embed regular expressions in C++ code, then remember that escape +characters are processed twice: once by the C++ compiler, and once by the +Boost.Regex expression compiler, so to pass the regular expression \d+ +to Boost.Regex, you need to embed "\\d+" in your code. Likewise to match a +literal backslash you will need to embed "\\\\" in your code. + +[*Q.] No matter what I do regex_match always returns false, what's going on? + +[*A.] The algorithm regex_match only succeeds if the expression matches *all* +of the text, if you want to *find* a sub-string within the text that matches +the expression then use regex_search instead. + +[*Q.] Why does using parenthesis in a POSIX regular expression change the +result of a match? + +[*A.] For POSIX (extended and basic) regular expressions, but not for perl regexes, +parentheses don't only mark; they determine what the best match is as well. +When the expression is compiled as a POSIX basic or extended regex then Boost.Regex +follows the POSIX standard leftmost longest rule for determining what matched. +So if there is more than one possible match after considering the whole expression, +it looks next at the first sub-expression and then the second sub-expression +and so on. So... + +"'''(0*)([0-9]*)'''" against "00123" would produce +$1 = "00" +$2 = "123" + +where as + +"0*([0-9])*" against "00123" would produce +$1 = "00123" + +If you think about it, had $1 only matched the "123", this would be "less good" +than the match "00123" which is both further to the left and longer. If you +want $1 to match only the "123" part, then you need to use something like: + +"0*([1-9][0-9]*)" + +as the expression. + +[*Q.] Why don't character ranges work properly (POSIX mode only)? + +[*A.] The POSIX standard specifies that character range expressions are +locale sensitive - so for example the expression [A-Z] will match any +collating element that collates between 'A' and 'Z'. That means that for +most locales other than "C" or "POSIX", [A-Z] would match the single +character 't' for example, which is not what most people expect - or +at least not what most people have come to expect from regular +expression engines. For this reason, the default behaviour of Boost.Regex +(perl mode) is to turn locale sensitive collation off by not setting the +`regex_constants::collate` compile time flag. However if you set a non-default +compile time flag - for example `regex_constants::extended` or +`regex_constants::basic`, then locale dependent collation will be enabled, +this also applies to the POSIX API functions which use either +`regex_constants::extended` or `regex_constants::basic` internally. +[Note - when `regex_constants::nocollate` in effect, the library behaves +"as if" the LC_COLLATE locale category were always "C", regardless of what +its actually set to - end note]. + +[*Q.] Why are there no throw specifications on any of the functions? +What exceptions can the library throw? + +[*A.] Not all compilers support (or honor) throw specifications, others +support them but with reduced efficiency. Throw specifications may be added +at a later date as compilers begin to handle this better. The library +should throw only three types of exception: [boost::regex_error] can be +thrown by [basic_regex] when compiling a regular expression, `std::runtime_error` +can be thrown when a call to `basic_regex::imbue` tries to open a message +catalogue that doesn't exist, or when a call to [regex_search] or [regex_match] +results in an "everlasting" search, or when a call to `RegEx::GrepFiles` or +`RegEx::FindFiles` tries to open a file that cannot be opened, finally +`std::bad_alloc` can be thrown by just about any of the functions in this library. + +[*Q.] Why can't I use the "convenience" versions of regex_match / +regex_search / regex_grep / regex_format / regex_merge? + +[*A.] These versions may or may not be available depending upon the +capabilities of your compiler, the rules determining the format of +these functions are quite complex - and only the versions visible to +a standard compliant compiler are given in the help. To find out +what your compiler supports, run <boost/regex.hpp> through your +C++ pre-processor, and search the output file for the function +that you are interested in. Note however, that very few current +compilers still have problems with these overloaded functions. + +[endsect] + diff --git a/libs/regex/doc/format_boost_syntax.qbk b/libs/regex/doc/format_boost_syntax.qbk new file mode 100644 index 0000000000..c38710410a --- /dev/null +++ b/libs/regex/doc/format_boost_syntax.qbk @@ -0,0 +1,102 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:boost_format_syntax Boost-Extended Format String Syntax] + +Boost-Extended format strings treat all characters as literals except for +'$', '\\', '(', ')', '?', and ':'. + +[h4 Grouping] + +The characters '(' and ')' perform lexical grouping, so use \\( and \\) if you +want a to output literal parenthesis. + +[h4 Conditionals] + +The character '?' begins a conditional expression, the general form is: + +?Ntrue-expression:false-expression + +where N is decimal digit. + +If sub-expression N was matched, then true-expression is evaluated and sent to +output, otherwise false-expression is evaluated and sent to output. + +You will normally need to surround a conditional-expression with parenthesis in +order to prevent ambiguities. + +For example, the format string "(?1foo:bar)" will replace each match found with "foo" if +the sub-expression $1 was matched, and with "bar" otherwise. + +For sub-expressions with an index greater than 9, or for access to named sub-expressions use: + +?{INDEX}true-expression:false-expression + +or + +?{NAME}true-expression:false-expression + + +[h4 Placeholder Sequences] + +Placeholder sequences specify that some part of what matched the regular expression +should be sent to output as follows: + +[table +[[Placeholder][Meaning]] +[[$&][Outputs what matched the whole expression.]] +[[$MATCH][As $&]] +[[${^MATCH}][As $&]] +[[$\`][Outputs the text between the end of the last match found (or the + start of the text if no previous match was found), and the start + of the current match.]] +[[$PREMATCH][As $\`]] +[[${^PREMATCH}][As $\`]] +[[$'][Outputs all the text following the end of the current match.]] +[[$POSTMATCH][As $']] +[[${^POSTMATCH}][As $']] +[[$+][Outputs what matched the last marked sub-expression in the regular expression.]] +[[$LAST_PAREN_MATCH][As $+]] +[[$LAST_SUBMATCH_RESULT][Outputs what matched the last sub-expression to be actually matched.]] +[[$^N][As $LAST_SUBMATCH_RESULT]] +[[$$][Outputs a literal '$']] +[[$n][Outputs what matched the n'th sub-expression.]] +[[${n}][Outputs what matched the n'th sub-expression.]] +[[$+{NAME}][Outputs whatever matched the sub-expression named "NAME".]] +] + +Any $-placeholder sequence not listed above, results in '$' being treated as a literal. + +[h4 Escape Sequences] + +An escape character followed by any character x, outputs that character unless +x is one of the escape sequences shown below. + +[table +[[Escape][Meaning]] +[[\\a][Outputs the bell character: '\\a'.]] +[[\\e][Outputs the ANSI escape character (code point 27).]] +[[\\f][Outputs a form feed character: '\\f']] +[[\\n][Outputs a newline character: '\\n'.]] +[[\\r][Outputs a carriage return character: '\\r'.]] +[[\\t][Outputs a tab character: '\\t'.]] +[[\\v][Outputs a vertical tab character: '\\v'.]] +[[\\xDD][Outputs the character whose hexadecimal code point is 0xDD]] +[[\\x{DDDD}][Outputs the character whose hexadecimal code point is 0xDDDDD]] +[[\\cX][Outputs the ANSI escape sequence "escape-X".]] +[[\\D][If D is a decimal digit in the range 1-9, then outputs the text that matched sub-expression D.]] +[[\\l][Causes the next character to be outputted, to be output in lower case.]] +[[\\u][Causes the next character to be outputted, to be output in upper case.]] +[[\\L][Causes all subsequent characters to be output in lower case, until a \\E is found.]] +[[\\U][Causes all subsequent characters to be output in upper case, until a \\E is found.]] +[[\\E][Terminates a \\L or \\U sequence.]] +] + +[endsect] + + diff --git a/libs/regex/doc/format_perl_syntax.qbk b/libs/regex/doc/format_perl_syntax.qbk new file mode 100644 index 0000000000..63cdbab2bf --- /dev/null +++ b/libs/regex/doc/format_perl_syntax.qbk @@ -0,0 +1,69 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:perl_format Perl Format String Syntax] + +Perl-style format strings treat all characters as literals except +'$' and '\\' which start placeholder and escape sequences respectively. + +Placeholder sequences specify that some part of what matched the regular expression +should be sent to output as follows: + +[table +[[Placeholder][Meaning]] +[[$&][Outputs what matched the whole expression.]] +[[$MATCH][As $&]] +[[${^MATCH}][As $&]] +[[$\`][Outputs the text between the end of the last match found (or the + start of the text if no previous match was found), and the start + of the current match.]] +[[$PREMATCH][As $\`]] +[[${^PREMATCH}][As $\`]] +[[$'][Outputs all the text following the end of the current match.]] +[[$POSTMATCH][As $']] +[[${^POSTMATCH}][As $']] +[[$+][Outputs what matched the last marked sub-expression in the regular expression.]] +[[$LAST_PAREN_MATCH][As $+]] +[[$LAST_SUBMATCH_RESULT][Outputs what matched the last sub-expression to be actually matched.]] +[[$^N][As $LAST_SUBMATCH_RESULT]] +[[$$][Outputs a literal '$']] +[[$n][Outputs what matched the n'th sub-expression.]] +[[${n}][Outputs what matched the n'th sub-expression.]] +[[$+{NAME}][Outputs whatever matched the sub-expression named "NAME".]] +] + +Any $-placeholder sequence not listed above, results in '$' being treated +as a literal. + +An escape character followed by any character x, outputs that character unless +x is one of the escape sequences shown below. + + +[table +[[Escape][Meaning]] +[[\\a][Outputs the bell character: '\\a'.]] +[[\\e][Outputs the ANSI escape character (code point 27).]] +[[\\f][Outputs a form feed character: '\\f']] +[[\\n][Outputs a newline character: '\\n'.]] +[[\\r][Outputs a carriage return character: '\\r'.]] +[[\\t][Outputs a tab character: '\\t'.]] +[[\\v][Outputs a vertical tab character: '\\v'.]] +[[\\xDD][Outputs the character whose hexadecimal code point is 0xDD]] +[[\\x{DDDD}][Outputs the character whose hexadecimal code point is 0xDDDDD]] +[[\\cX][Outputs the ANSI escape sequence "escape-X".]] +[[\\D][If D is a decimal digit in the range 1-9, then outputs the text that matched sub-expression D.]] +[[\\l][Causes the next character to be outputted, to be output in lower case.]] +[[\\u][Causes the next character to be outputted, to be output in upper case.]] +[[\\L][Causes all subsequent characters to be output in lower case, until a \\E is found.]] +[[\\U][Causes all subsequent characters to be output in upper case, until a \\E is found.]] +[[\\E][Terminates a \\L or \\U sequence.]] +] + +[endsect] + + diff --git a/libs/regex/doc/format_sed_syntax.qbk b/libs/regex/doc/format_sed_syntax.qbk new file mode 100644 index 0000000000..30706ebe58 --- /dev/null +++ b/libs/regex/doc/format_sed_syntax.qbk @@ -0,0 +1,41 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:sed_format Sed Format String Syntax] + +Sed-style format strings treat all characters as literals except: + +[table +[[character][description]] +[[&][The ampersand character is replaced in the output stream by + the the whole of what matched the regular expression. Use + \\& to output a literal '&' character.]] +[[\\][Specifies an escape sequence.]] +] + +An escape character followed by any character x, outputs that character unless x +is one of the escape sequences shown below. + +[table +[[Escape][Meaning]] +[[\\a][Outputs the bell character: '\\a'.]] +[[\\e][Outputs the ANSI escape character (code point 27).]] +[[\\f][Outputs a form feed character: '\\f']] +[[\\n][Outputs a newline character: '\\n'.]] +[[\\r][Outputs a carriage return character: '\\r'.]] +[[\\t][Outputs a tab character: '\\t'.]] +[[\\v][Outputs a vertical tab character: '\\v'.]] +[[\\xDD][Outputs the character whose hexadecimal code point is 0xDD]] +[[\\x{DDDD}][Outputs the character whose hexadecimal code point is 0xDDDDD]] +[[\\cX][Outputs the ANSI escape sequence "escape-X".]] +[[\\D][If D is a decimal digit in the range 1-9, then outputs the text that matched sub-expression D.]] +] + +[endsect] + + diff --git a/libs/regex/doc/format_syntax.qbk b/libs/regex/doc/format_syntax.qbk new file mode 100644 index 0000000000..4306570369 --- /dev/null +++ b/libs/regex/doc/format_syntax.qbk @@ -0,0 +1,26 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:format Search and Replace Format String Syntax] + +Format strings are used by the algorithm [regex_replace] and by +[match_results_format], and are used to transform one string into another. + +There are three kind of format string: [sed_format], [perl_format] and [boost_extended_format]. + +Alternatively, when the flag `format_literal` is passed to one of these functions, +then the format string is treated as a string literal, and is copied unchanged +to the output. + +[include format_sed_syntax.qbk] +[include format_perl_syntax.qbk] +[include format_boost_syntax.qbk] + +[endsect] + + diff --git a/libs/regex/doc/further_info.qbk b/libs/regex/doc/further_info.qbk new file mode 100644 index 0000000000..08c5d0ff29 --- /dev/null +++ b/libs/regex/doc/further_info.qbk @@ -0,0 +1,36 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:futher References and Further Information] + +Short tutorials on regular expressions can be +[@http://etext.lib.virginia.edu/helpsheets/regex.html found here] and +[@http://www.linuxpcug.org/lessons/regexp.html here]. + +The main book on regular expressions is +[@http://www.oreilly.com/catalog/regex/ Mastering Regular Expressions, published by O'Reilly]. + +Boost.Regex forms the basis for the regular expression chapter of the [tr1]. + +The [@http://www.opengroup.org/onlinepubs/7908799/toc.htm Open Unix Specification] +contains a wealth of useful material, +including the POSIX regular expression syntax. + +The [@http://www.cs.ucr.edu/~stelo/pattern.html Pattern Matching Pointers] +site is a "must visit" resource for anyone interested in pattern matching. + +[@http://glimpse.cs.arizona.edu/ Glimpse and Agrep], use a simplified +regular expression syntax to achieve faster search times. + +[@http://glimpse.cs.arizona.edu/udi.html Udi Manber] +and [@http://www.dcc.uchile.cl/~rbaeza/ Ricardo Baeza-Yates] both have a +selection of useful pattern matching papers available from their respective web sites. + +[endsect] + + diff --git a/libs/regex/doc/gcc-performance.html b/libs/regex/doc/gcc-performance.html new file mode 100644 index 0000000000..5dcea95ab7 --- /dev/null +++ b/libs/regex/doc/gcc-performance.html @@ -0,0 +1,543 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> + <head> + <title>Regular Expression Performance Comparison (gcc 3.2)</title> + <meta name="generator" content="HTML Tidy, see www.w3.org"> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> + <META content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot" name="Template"> + <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> + </head> + <body bgcolor="#ffffff" link="#0000ff" vlink="#800080"> + <h2>Regular Expression Performance Comparison</h2> + <p>The following tables provide comparisons between the following regular + expression libraries:</p> + <p><a href="http://www.boost.org/">The Boost regex library</a>.</p> + <p><a href="http://www.gnu.org">The GNU regular expression library</a>.</p> + <p>Philip Hazel's <a href="http://www.pcre.org">PCRE</a> library.</p> + <h3>Details</h3> + <p>Machine: Intel Pentium 4 2.8GHz PC.</p> + <p>Compiler: GNU C++ version 3.2 20020927 (prerelease).</p> + <p>C++ Standard Library: GNU libstdc++ version 20020927.</p> + <p>OS: Cygwin.</p> + <p>Boost version: 1.31.0.</p> + <p>PCRE version: 4.1.</p> + <p>As ever care should be taken in interpreting the results, only sensible regular + expressions (rather than pathological cases) are given, most are taken from the + Boost regex examples, or from the <a href="http://www.regxlib.com/">Library of + Regular Expressions</a>. In addition, some variation in the relative + performance of these libraries can be expected on other machines - as memory + access and processor caching effects can be quite large for most finite state + machine algorithms. In each case the first figure given is the relative time + taken (so a value of 1.0 is as good as it gets), while the second figure is the + actual time taken.</p> + <h3>Averages</h3> + <p>The following are the average relative scores for all the tests: the perfect + regular expression library would score 1, in practice anything less than 2 + is pretty good.</p> + <table border="1" cellspacing="1"> + <tr> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td>1.4503</td> + <td>1.49124</td> + <td>108.372</td> + <td>1.56255</td> + </tr> + </table> + <br> + <br> + <h3>Comparison 1: Long Search</h3> + <p>For each of the following regular expressions the time taken to find all + occurrences of the expression within a long English language text was measured + (<a href="http://www.gutenberg.org/files/3200/old/mtent12.zip">mtent12.txt</a> + from <a href="http://promo.net/pg/">Project Gutenberg</a>, 19Mb). </p> + <table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>Twain</code></td> + <td>3.49<br> + (0.205s)</td> + <td>4.09<br> + (0.24s)</td> + <td>65.2<br> + (3.83s)</td> + <td><font color="#008000">1<br> + (0.0588s)</font></td> + </tr> + <tr> + <td><code>Huck[[:alpha:]]+</code></td> + <td>3.86<br> + (0.203s)</td> + <td>4.52<br> + (0.238s)</td> + <td>100<br> + (5.26s)</td> + <td><font color="#008000">1<br> + (0.0526s)</font></td> + </tr> + <tr> + <td><code>[[:alpha:]]+ing</code></td> + <td><font color="#008000">1.01<br> + (1.23s)</font></td> + <td><font color="#008000">1<br> + (1.22s)</font></td> + <td>4.95<br> + (6.04s)</td> + <td>4.67<br> + (5.71s)</td> + </tr> + <tr> + <td><code>^[^ ]*?Twain</code></td> + <td><font color="#008000">1<br> + (0.31s)</font></td> + <td><font color="#008000">1.05<br> + (0.326s)</font></td> + <td>NA</td> + <td>3.32<br> + (1.03s)</td> + </tr> + <tr> + <td><code>Tom|Sawyer|Huckleberry|Finn</code></td> + <td><font color="#008000">1.02<br> + (0.125s)</font></td> + <td><font color="#008000">1<br> + (0.123s)</font></td> + <td>165<br> + (20.3s)</td> + <td><font color="#008000">1.08<br> + (0.133s)</font></td> + </tr> + <tr> + <td><code> (Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)</code></td> + <td><font color="#008000">1<br> + (0.345s)</font></td> + <td><font color="#008000">1.03<br> + (0.355s)</font></td> + <td>NA</td> + <td>1.71<br> + (0.59s)</td> + </tr> + </table> + <br> + <br> + <h3>Comparison 2: Medium Sized Search</h3> + <p>For each of the following regular expressions the time taken to find all + occurrences of the expression within a medium sized English language text was + measured (the first 50K from mtent12.txt). </p> + <table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>Twain</code></td> + <td>1.8<br> + (0.000519s)</td> + <td>2.14<br> + (0.000616s)</td> + <td>9.08<br> + (0.00262s)</td> + <td><font color="#008000">1<br> + (0.000289s)</font></td> + </tr> + <tr> + <td><code>Huck[[:alpha:]]+</code></td> + <td>3.65<br> + (0.000499s)</td> + <td>4.36<br> + (0.000597s)</td> + <td><font color="#008000">1<br> + (0.000137s)</font></td> + <td>1.43<br> + (0.000196s)</td> + </tr> + <tr> + <td><code>[[:alpha:]]+ing</code></td> + <td><font color="#008000">1<br> + (0.00258s)</font></td> + <td><font color="#008000">1<br> + (0.00258s)</font></td> + <td>5.28<br> + (0.0136s)</td> + <td>5.63<br> + (0.0145s)</td> + </tr> + <tr> + <td><code>^[^ ]*?Twain</code></td> + <td><font color="#008000">1<br> + (0.000929s)</font></td> + <td><font color="#008000">1.03<br> + (0.000957s)</font></td> + <td>NA</td> + <td>2.82<br> + (0.00262s)</td> + </tr> + <tr> + <td><code>Tom|Sawyer|Huckleberry|Finn</code></td> + <td><font color="#008000">1<br> + (0.000812s)</font></td> + <td><font color="#008000">1<br> + (0.000812s)</font></td> + <td>60.1<br> + (0.0488s)</td> + <td>1.28<br> + (0.00104s)</td> + </tr> + <tr> + <td><code> (Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)</code></td> + <td><font color="#008000">1.02<br> + (0.00178s)</font></td> + <td><font color="#008000">1<br> + (0.00174s)</font></td> + <td>242<br> + (0.421s)</td> + <td>1.3<br> + (0.00227s)</td> + </tr> + </table> + <br> + <br> + <h3>Comparison 3: C++ Code Search</h3> + <p>For each of the following regular expressions the time taken to find all + occurrences of the expression within the C++ source file <a href="../../../boost/crc.hpp"> + boost/crc.hpp</a> was measured. </p> + <table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code> ^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?(class|struct)[[:space:]]*(\<\w+\>([ + ]*\([^)]*\))?[[:space:]]*)*(\<\w*\>)[[:space:]]*(<[^;:{]+>[[:space:]]*)?(\{|:[^;\{()]*\{)</code></td> + <td><font color="#008000">1.04<br> + (0.000144s)</font></td> + <td><font color="#008000">1<br> + (0.000139s)</font></td> + <td>862<br> + (0.12s)</td> + <td>4.56<br> + (0.000636s)</td> + </tr> + <tr> + <td><code>(^[ + ]*#(?:[^\\\n]|\\[^\n_[:punct:][:alnum:]]*[\n[:punct:][:word:]])*)|(//[^\n]*|/\*.*?\*/)|\<([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\>|('(?:[^\\']|\\.)*'|"(?:[^\\"]|\\.)*")|\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool|break|case|catch|cdecl|char|class|const|const_cast|continue|default|delete|do|double|dynamic_cast|else|enum|explicit|extern|false|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|operator|pascal|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_cast|struct|switch|template|this|throw|true|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\></code></td> + <td><font color="#008000">1<br> + (0.0139s)</font></td> + <td><font color="#008000">1.01<br> + (0.0141s)</font></td> + <td>NA</td> + <td>1.55<br> + (0.0216s)</td> + </tr> + <tr> + <td><code>^[ ]*#[ ]*include[ ]+("[^"]+"|<[^>]+>)</code></td> + <td><font color="#008000">1.04<br> + (0.000332s)</font></td> + <td><font color="#008000">1<br> + (0.000318s)</font></td> + <td>130<br> + (0.0413s)</td> + <td>1.72<br> + (0.000547s)</td> + </tr> + <tr> + <td><code>^[ ]*#[ ]*include[ ]+("boost/[^"]+"|<boost/[^>]+>)</code></td> + <td><font color="#008000">1.02<br> + (0.000323s)</font></td> + <td><font color="#008000">1<br> + (0.000318s)</font></td> + <td>150<br> + (0.0476s)</td> + <td>1.72<br> + (0.000547s)</td> + </tr> + </table> + <br> + <h3></h3> + <H3>Comparison 4: HTML Document Search + </H3> + <p>For each of the following regular expressions the time taken to find all + occurrences of the expression within the html file <a href="../../libraries.htm">libs/libraries.htm</a> + was measured. </p> + <table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>beman|john|dave</code></td> + <td><font color="#008000">1.03<br> + (0.000367s)</font></td> + <td><font color="#008000">1<br> + (0.000357s)</font></td> + <td>47.4<br> + (0.0169s)</td> + <td>1.16<br> + (0.000416s)</td> + </tr> + <tr> + <td><code><p>.*?</p></code></td> + <td>1.25<br> + (0.000459s)</td> + <td><font color="#008000">1<br> + (0.000367s)</font></td> + <td>NA</td> + <td><font color="#008000">1.03<br> + (0.000376s)</font></td> + </tr> + <tr> + <td><code> <a[^>]+href=("[^"]*"|[^[:space:]]+)[^>]*></code></td> + <td><font color="#008000">1<br> + (0.000509s)</font></td> + <td><font color="#008000">1.02<br> + (0.000518s)</font></td> + <td>305<br> + (0.155s)</td> + <td><font color="#008000">1.1<br> + (0.000558s)</font></td> + </tr> + <tr> + <td><code> <h[12345678][^>]*>.*?</h[12345678]></code></td> + <td><font color="#008000">1.04<br> + (0.00025s)</font></td> + <td><font color="#008000">1<br> + (0.00024s)</font></td> + <td>NA</td> + <td>1.16<br> + (0.000279s)</td> + </tr> + <tr> + <td><code> <img[^>]+src=("[^"]*"|[^[:space:]]+)[^>]*></code></td> + <td>2.22<br> + (0.000489s)</td> + <td>1.69<br> + (0.000372s)</td> + <td>148<br> + (0.0326s)</td> + <td><font color="#008000">1<br> + (0.00022s)</font></td> + </tr> + <tr> + <td><code> <font[^>]+face=("[^"]*"|[^[:space:]]+)[^>]*>.*?</font></code></td> + <td>1.71<br> + (0.000371s)</td> + <td>1.75<br> + (0.000381s)</td> + <td>NA</td> + <td><font color="#008000">1<br> + (0.000218s)</font></td> + </tr> + </table> + <br> + <br> + <h3>Comparison 3: Simple Matches</h3> + <p>For each of the following regular expressions the time taken to match against + the text indicated was measured. </p> + <table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>Text</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>abc</code></td> + <td>abc</td> + <td>1.36<br> + (2.15e-07s)</td> + <td>1.36<br> + (2.15e-07s)</td> + <td>2.76<br> + (4.34e-07s)</td> + <td><font color="#008000">1<br> + (1.58e-07s)</font></td> + </tr> + <tr> + <td><code>^([0-9]+)(\-| |$)(.*)$</code></td> + <td>100- this is a line of ftp response which contains a message string</td> + <td>1.55<br> + (7.26e-07s)</td> + <td>1.51<br> + (7.07e-07s)</td> + <td>319<br> + (0.000149s)</td> + <td><font color="#008000">1<br> + (4.67e-07s)</font></td> + </tr> + <tr> + <td><code>([[:digit:]]{4}[- ]){3}[[:digit:]]{3,4}</code></td> + <td>1234-5678-1234-456</td> + <td>1.96<br> + (9.54e-07s)</td> + <td>1.96<br> + (9.54e-07s)</td> + <td>44.5<br> + (2.17e-05s)</td> + <td><font color="#008000">1<br> + (4.87e-07s)</font></td> + </tr> + <tr> + <td><code> ^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$</code></td> + <td>john@johnmaddock.co.uk</td> + <td>1.22<br> + (1.51e-06s)</td> + <td>1.23<br> + (1.53e-06s)</td> + <td>162<br> + (0.000201s)</td> + <td><font color="#008000">1<br> + (1.24e-06s)</font></td> + </tr> + <tr> + <td><code> ^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$</code></td> + <td>foo12@foo.edu</td> + <td>1.28<br> + (1.47e-06s)</td> + <td>1.3<br> + (1.49e-06s)</td> + <td>104<br> + (0.00012s)</td> + <td><font color="#008000">1<br> + (1.15e-06s)</font></td> + </tr> + <tr> + <td><code> ^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$</code></td> + <td>bob.smith@foo.tv</td> + <td>1.28<br> + (1.47e-06s)</td> + <td>1.3<br> + (1.49e-06s)</td> + <td>113<br> + (0.00013s)</td> + <td><font color="#008000">1<br> + (1.15e-06s)</font></td> + </tr> + <tr> + <td><code>^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$</code></td> + <td>EH10 2QQ</td> + <td>1.38<br> + (4.68e-07s)</td> + <td>1.41<br> + (4.77e-07s)</td> + <td>13.5<br> + (4.59e-06s)</td> + <td><font color="#008000">1<br> + (3.39e-07s)</font></td> + </tr> + <tr> + <td><code>^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$</code></td> + <td>G1 1AA</td> + <td>1.28<br> + (4.35e-07s)</td> + <td>1.25<br> + (4.25e-07s)</td> + <td>11.7<br> + (3.97e-06s)</td> + <td><font color="#008000">1<br> + (3.39e-07s)</font></td> + </tr> + <tr> + <td><code>^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$</code></td> + <td>SW1 1ZZ</td> + <td>1.32<br> + (4.53e-07s)</td> + <td>1.31<br> + (4.49e-07s)</td> + <td>12.2<br> + (4.2e-06s)</td> + <td><font color="#008000">1<br> + (3.44e-07s)</font></td> + </tr> + <tr> + <td><code> ^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$</code></td> + <td>4/1/2001</td> + <td>1.16<br> + (3.82e-07s)</td> + <td>1.2<br> + (3.96e-07s)</td> + <td>13.9<br> + (4.59e-06s)</td> + <td><font color="#008000">1<br> + (3.29e-07s)</font></td> + </tr> + <tr> + <td><code> ^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$</code></td> + <td>12/12/2001</td> + <td>1.38<br> + (4.49e-07s)</td> + <td>1.38<br> + (4.49e-07s)</td> + <td>16<br> + (5.2e-06s)</td> + <td><font color="#008000">1<br> + (3.25e-07s)</font></td> + </tr> + <tr> + <td><code>^[-+]?[[:digit:]]*\.?[[:digit:]]*$</code></td> + <td>123</td> + <td>1.19<br> + (7.64e-07s)</td> + <td>1.16<br> + (7.45e-07s)</td> + <td>7.51<br> + (4.81e-06s)</td> + <td><font color="#008000">1<br> + (6.4e-07s)</font></td> + </tr> + <tr> + <td><code>^[-+]?[[:digit:]]*\.?[[:digit:]]*$</code></td> + <td>+3.14159</td> + <td>1.32<br> + (8.97e-07s)</td> + <td>1.31<br> + (8.88e-07s)</td> + <td>14<br> + (9.48e-06s)</td> + <td><font color="#008000">1<br> + (6.78e-07s)</font></td> + </tr> + <tr> + <td><code>^[-+]?[[:digit:]]*\.?[[:digit:]]*$</code></td> + <td>-3.14159</td> + <td>1.32<br> + (8.97e-07s)</td> + <td>1.31<br> + (8.88e-07s)</td> + <td>14<br> + (9.48e-06s)</td> + <td><font color="#008000">1<br> + (6.78e-07s)</font></td> + </tr> + </table> + <br> + <br> + <hr> + <p><i>© Copyright John Maddock 2003</i></p> + <P><I>Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file <A href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> + or copy at <A href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)</I></P> + </body> +</html> + diff --git a/libs/regex/doc/headers.qbk b/libs/regex/doc/headers.qbk new file mode 100644 index 0000000000..d7b8e7ccc9 --- /dev/null +++ b/libs/regex/doc/headers.qbk @@ -0,0 +1,22 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:headers Headers] + +There are two main headers used by this library: `<boost/regex.hpp>` +provides full access to the main template library, while `<boost/cregex.hpp>` +provides access to the (deprecated) high level class RegEx, and the +POSIX API functions. + +There is also a header containing only forward declarations +`<boost/regex_fwd.hpp>` for use when an interface is dependent upon +[basic_regex], but otherwise does not need the full definitions. + +[endsect] + + diff --git a/libs/regex/doc/history.qbk b/libs/regex/doc/history.qbk new file mode 100644 index 0000000000..168fdf2a13 --- /dev/null +++ b/libs/regex/doc/history.qbk @@ -0,0 +1,148 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:history History] + +New issues should be submitted at [@http://svn.boost.org svn.boost.org] - don't forget to include your +email address in the ticket! + +Currently open issues can be viewed [@https://svn.boost.org/trac/boost/query?status=assigned&status=new&status=reopened&component=regex&order=priority&col=id&col=summary&col=status&col=type&col=milestone&col=component here]. + +All issues including closed ones can be viewed [@https://svn.boost.org/trac/boost/query?status=assigned&status=closed&status=new&status=reopened&component=regex&order=priority&col=id&col=summary&col=status&col=type&col=milestone&col=component here]. + +[h4 Boost-1.48] + +Fixed issues: +[@https://svn.boost.org/trac/boost/ticket/688 #698], [@https://svn.boost.org/trac/boost/ticket/5835 #5835], +[@https://svn.boost.org/trac/boost/ticket/5958 #5958], [@https://svn.boost.org/trac/boost/ticket/5736 #5736]. + + +[h4 Boost 1.47] + +Fixed issues: +[@https://svn.boost.org/trac/boost/ticket/5223 #5223], [@https://svn.boost.org/trac/boost/ticket/5353 #5353], +[@https://svn.boost.org/trac/boost/ticket/5363 #5363], [@https://svn.boost.org/trac/boost/ticket/5462 #5462], +[@https://svn.boost.org/trac/boost/ticket/5472 #5472], [@https://svn.boost.org/trac/boost/ticket/5504 #5504]. + +[h4 Boost 1.44] + +Fixed issues: +[@https://svn.boost.org/trac/boost/ticket/4309 #4309], +[@https://svn.boost.org/trac/boost/ticket/4215 #4215], +[@https://svn.boost.org/trac/boost/ticket/4212 #4212], +[@https://svn.boost.org/trac/boost/ticket/4191 #4191], +[@https://svn.boost.org/trac/boost/ticket/4132 #4132], +[@https://svn.boost.org/trac/boost/ticket/4123 #4123], +[@https://svn.boost.org/trac/boost/ticket/4114 #4114], +[@https://svn.boost.org/trac/boost/ticket/4036 #4036], +[@https://svn.boost.org/trac/boost/ticket/4020 #4020], +[@https://svn.boost.org/trac/boost/ticket/3941 #3941], +[@https://svn.boost.org/trac/boost/ticket/3902 #3902], +[@https://svn.boost.org/trac/boost/ticket/3890 #3890] + +[h4 Boost 1.42] + +* Added support for Functors rather than strings as format expressions. +* Improved error reporting when throwing exceptions to include better more relevant information. +* Improved performance and reduced stack usage of recursive expressions. +* Fixed tickets +[@https://svn.boost.org/trac/boost/ticket/2802 #2802], +[@https://svn.boost.org/trac/boost/ticket/3425 #3425], +[@https://svn.boost.org/trac/boost/ticket/3507 #3507], +[@https://svn.boost.org/trac/boost/ticket/3546 #3546], +[@https://svn.boost.org/trac/boost/ticket/3631 #3631], +[@https://svn.boost.org/trac/boost/ticket/3632 #3632], +[@https://svn.boost.org/trac/boost/ticket/3715 #3715], +[@https://svn.boost.org/trac/boost/ticket/3718 #3718], +[@https://svn.boost.org/trac/boost/ticket/3763 #3763], +[@https://svn.boost.org/trac/boost/ticket/3764 #3764] + +[h4 Boost 1.40] + +* Added support for many Perl 5.10 syntax elements including named +sub-expressions, branch resets and recursive regular expressions. + +[h4 Boost 1.38] + +* [*Breaking change]: empty expressions, and empty alternatives are now +allowed when using the Perl regular expression syntax. This change has +been added for Perl compatibility, when the new [syntax_option_type] +['no_empty_expressions] is set then the old behaviour is preserved and +empty expressions are prohibited. This is issue +[@https://svn.boost.org/trac/boost/ticket/1081 #1081]. +* Added support for Perl style ${n} expressions in format strings +(issue [@https://svn.boost.org/trac/boost/ticket/2556 #2556]). +* Added support for accessing the location of sub-expressions within the +regular expression string +(issue [@https://svn.boost.org/trac/boost/ticket/2269 #2269]). +* Fixed compiler compatibility issues +[@https://svn.boost.org/trac/boost/ticket/2244 #2244], +[@https://svn.boost.org/trac/boost/ticket/2514 #2514], +and +[@https://svn.boost.org/trac/boost/ticket/2244 #2458]. + + +[h4 Boost 1.34] + +* Fix for non-greedy repeats and partial matches not working correctly in some cases. +* Fix for non-greedy repeats on VC++ not working in some cases (bug report 1515830). +* Changed match_results::position() to return a valid result when *this represents a partial match. +* Fixed the grep and egrep options so that the newline character gets treated the same as |. + +[h4 Boost 1.33.1] + +* Fixed broken makefiles. +* Fixed configuration setup to allow building with VC7.1 - STLport-4.6.2 when using /Zc:wchar_t. +* Moved declarations class-inline in static_mutex.hpp so that SGI Irix compiler can cope. +* Added needed standard library #includes to fileiter.hpp, regex_workaround.hpp and cpp_regex_traits.hpp. +* Fixed a bug where non-greedy repeats could in certain strange curcumstances repeat more times than their maximum value. +* Fixed the value returned by basic_regex<>::empty() from a default constructed object. +* Changed the deffinition of regex_error to make it backwards compatible with Boost-1.32.0. +* Disabled external templates for Intel C++ 8.0 and earlier - otherwise unresolved references can occur. +* Rewritten extern template code for gcc so that only specific member functions are exported: otherwise strange unresolved references can occur when linking and mixing debug and non-debug code. +* Initialise all the data members of the unicode_iterators: this keeps gcc from issuing needless warnings. +* Ported the ICU integration code to VC6 and VC7. +* Ensured code is STLport debug mode clean. +* Fixed lookbehind assertions so that fixed length repeats are permitted, and so that regex iteration allows lookbehind to look back before the current search range (into the last match). +* Fixed strange bug with non-greedy repeats inside forward lookahead assertions. +* Enabled negated character classes inside character sets. +* Fixed regression so that [a-z-] is a valid expression again. +* Fixed bug that allowed some invalid expressions to be accepted. + +[h4 Boost 1.33.0] + +* Completely rewritten expression parsing code, and traits class support; now conforms to the standardization proposal. +* Breaking Change: The syntax options that can be passed to basic_regex constructors have been rationalized. The default option (perl) now has a value of zero, and it is now clearly documented which options apply to which regular expression syntax styles (perl, POSIX-extended, POSIX-basic etc). Some of the more esoteric options have now been removed, so there is the possibility that existing code may fail to compile: however equivalent functionality should still be available. +* Breaking Change: POSIX-extended and POSIX-basic regular expressions now enforce the letter of the POSIX standard much more closely than before. +* Added support for (?imsx-imsx) constructs. +* Added support for lookbehind expressions (?<=positive-lookbehind) and (?<!negative-lookbehind). +* Added support for conditional expressions (?(assertion)true-expresion|false-expression). +* Added MFC/ATL string wrappers. +* Added Unicode support; based on ICU. +* Changed newline support to recognise \\f as a line separator (all character types), and \\x85 as a line separator for wide characters / Unicode only. +* Added a new format flag format_literal that treats the replace string as a literal, rather than a Perl or Sed style format string. +* Errors are now reported by throwing exceptions of type regex_error. The types used previously - bad_expression and bad_pattern - are now just typedefs for regex_error. Type regex_error has a couple of new members: code() to report an error code rather than a string, and position() to report where in the expression the error occurred. + +[h4 Boost 1.32.1] + +* Fixed bug in partial matches of bounded repeats of '.'. + +[h4 Boost 1.31.0] + +* Completely rewritten pattern matching code - it is now up to 10 times faster than before. +* Reorganized documentation. +* Deprecated all interfaces that are not part of the regular expression standardization proposal. +* Added regex_iterator and regex_token_iterator . +* Added support for Perl style independent sub-expressions. +* Added non-member operators to the sub_match class, so that you can compare sub_match's with strings, or add them to a string to produce a new string. +* Added experimental support for extended capture information. +* Changed the match flags so that they are a distinct type (not an integer), if you try to pass the match flags as an integer rather than match_flag_type to the regex algorithms then you will now get a compiler error. + +[endsect] + + diff --git a/libs/regex/doc/html/boost_regex/background_information.html b/libs/regex/doc/html/boost_regex/background_information.html new file mode 100644 index 0000000000..ccd9ff3ae6 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information.html @@ -0,0 +1,60 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Background Information</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="ref/internal_details/uni_iter.html" title="Unicode Iterators"> +<link rel="next" href="background_information/headers.html" title="Headers"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="ref/internal_details/uni_iter.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="background_information/headers.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.background_information"></a><a class="link" href="background_information.html" title="Background Information">Background Information</a> +</h2></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="background_information/headers.html">Headers</a></span></dt> +<dt><span class="section"><a href="background_information/locale.html">Localization</a></span></dt> +<dt><span class="section"><a href="background_information/thread_safety.html">Thread + Safety</a></span></dt> +<dt><span class="section"><a href="background_information/examples.html">Test and + Example Programs</a></span></dt> +<dt><span class="section"><a href="background_information/futher.html">References + and Further Information</a></span></dt> +<dt><span class="section"><a href="background_information/faq.html">FAQ</a></span></dt> +<dt><span class="section"><a href="background_information/performance.html">Performance</a></span></dt> +<dt><span class="section"><a href="background_information/standards.html">Standards + Conformance</a></span></dt> +<dt><span class="section"><a href="background_information/redist.html">Redistributables</a></span></dt> +<dt><span class="section"><a href="background_information/acknowledgements.html">Acknowledgements</a></span></dt> +<dt><span class="section"><a href="background_information/history.html">History</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="ref/internal_details/uni_iter.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="background_information/headers.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/acknowledgements.html b/libs/regex/doc/html/boost_regex/background_information/acknowledgements.html new file mode 100644 index 0000000000..965257cd3c --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/acknowledgements.html @@ -0,0 +1,87 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Acknowledgements</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="redist.html" title="Redistributables"> +<link rel="next" href="history.html" title="History"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="redist.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="history.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.acknowledgements"></a><a class="link" href="acknowledgements.html" title="Acknowledgements">Acknowledgements</a> +</h3></div></div></div> +<p> + The author can be contacted at john - at - johnmaddock.co.uk; the home page + for this library is at <a href="http://www.boost.org" target="_top">www.boost.org</a>. + </p> +<p> + I am indebted to <a href="http://www.cs.princeton.edu/~rs/" target="_top">Robert Sedgewick's + "Algorithms in C++"</a> for forcing me to think about algorithms + and their performance, and to the folks at boost for forcing me to think, + period. + </p> +<p> + <a href="http://www.boost-consulting.com/" target="_top">Eric Niebler</a>, author + of Boost.Expressive and the <a href="http://research.microsoft.com/projects/greta" target="_top">GRETA + regular expression component</a>, has shared several important ideas, + in a series of long discussions. + </p> +<p> + Pete Becker, of <a href="http://www.versatilecoding.com" target="_top">Roundhouse Consulting, + Ltd.</a>, has helped enormously with the standardisation proposal language. + </p> +<p> + The following people have all contributed useful comments or fixes: Dave + Abrahams, Mike Allison, Edan Ayal, Jayashree Balasubramanian, Jan Bölsche, + Beman Dawes, Paul Baxter, David Bergman, David Dennerline, Edward Diener, + Peter Dimov, Robert Dunn, Fabio Forno, Tobias Gabrielsson, Rob Gillen, Marc + Gregoire, Chris Hecker, Nick Hodapp, Jesse Jones, Martin Jost, Boris Krasnovskiy, + Jan Hermelink, Max Leung, Wei-hao Lin, Jens Maurer, Richard Peters, Heiko + Schmidt, Jason Shirk, Gerald Slacik, Scobie Smith, Mike Smyth, Alexander + Sokolovsky, Hervé Poirier, Michael Raykh, Marc Recht, Scott VanCamp, Bruno + Voigt, Alexey Voinov, Jerry Waldorf, Rob Ward, Lealon Watts, John Wismar, + Thomas Witt and Yuval Yosef. + </p> +<p> + If I've missed your name off (I'm sure there are a few, just not who they + are...) then please do get in touch. + </p> +<p> + I am also grateful to the manuals supplied with the Henry Spencer, PCRE, + Perl and GNU regular expression libraries - wherever possible I have tried + to maintain compatibility with these libraries and with the POSIX standard + - the code however is entirely my own, including any bugs! I can absolutely + guarantee that I will not fix any bugs I don't know about, so if you have + any comments or spot any bugs, please get in touch. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="redist.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="history.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/examples.html b/libs/regex/doc/html/boost_regex/background_information/examples.html new file mode 100644 index 0000000000..988b76740e --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/examples.html @@ -0,0 +1,275 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Test and Example Programs</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="thread_safety.html" title="Thread Safety"> +<link rel="next" href="futher.html" title="References and Further Information"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="thread_safety.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="futher.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.examples"></a><a class="link" href="examples.html" title="Test and Example Programs">Test and + Example Programs</a> +</h3></div></div></div> +<h5> +<a name="boost_regex.background_information.examples.h0"></a> + <span><a name="boost_regex.background_information.examples.test_programs"></a></span><a class="link" href="examples.html#boost_regex.background_information.examples.test_programs">Test + Programs</a> + </h5> +<p> + <span class="bold"><strong>regress:</strong></span> + </p> +<p> + A regression test application that gives the matching/searching algorithms + a full workout. The presence of this program is your guarantee that the library + will behave as claimed - at least as far as those items tested are concerned + - if anyone spots anything that isn't being tested I'd be glad to hear about + it. + </p> +<p> + Files: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <a href="../../../../test/regress/main.cpp" target="_top">main.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/basic_tests.cpp" target="_top">basic_tests.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_alt.cpp" target="_top">test_alt.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_anchors.cpp" target="_top">test_anchors.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_asserts.cpp" target="_top">test_asserts.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_backrefs.cpp" target="_top">test_backrefs.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_deprecated.cpp" target="_top">test_deprecated.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_emacs.cpp" target="_top">test_emacs.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_escapes.cpp" target="_top">test_escapes.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_grep.cpp" target="_top">test_grep.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_icu.cpp" target="_top">test_icu.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_locale.cpp" target="_top">test_locale.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_mfc.cpp" target="_top">test_mfc.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_non_greedy_repeats.cpp" target="_top">test_non_greedy_repeats.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_operators.cpp" target="_top">test_operators.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_overloads.cpp" target="_top">test_overloads.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_perl_ex.cpp" target="_top">test_perl_ex.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_replace.cpp" target="_top">test_replace.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_sets.cpp" target="_top">test_sets.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_simple_repeats.cpp" target="_top">test_simple_repeats.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_tricky_cases.cpp" target="_top">test_tricky_cases.cpp</a> + </li> +<li class="listitem"> + <a href="../../../../test/regress/test_unicode.cpp" target="_top">test_unicode.cpp</a> + </li> +</ul></div> +<p> + <span class="bold"><strong>bad_expression_test:</strong></span> + </p> +<p> + Verifies that "bad" regular expressions don't cause the matcher + to go into infinite loops, but to throw an exception instead. + </p> +<p> + Files: <a href="../../../../test/pathology/bad_expression_test.cpp" target="_top">bad_expression_test.cpp</a>. + </p> +<p> + <span class="bold"><strong>recursion_test:</strong></span> + </p> +<p> + Verifies that the matcher can't overrun the stack (no matter what the expression). + </p> +<p> + Files: <a href="../../../../test/pathology/recursion_test.cpp" target="_top">recursion_test.cpp</a>. + </p> +<p> + <span class="bold"><strong>concepts:</strong></span> + </p> +<p> + Verifies that the library meets all documented concepts (a compile only test). + </p> +<p> + Files: <a href="../../../../test/concepts/concept_check.cpp" target="_top">concept_check.cpp</a>. + </p> +<p> + <span class="bold"><strong>captures_test:</strong></span> + </p> +<p> + Test code for captures. + </p> +<p> + Files: <a href="../../../../test/captures/captures_test.cpp" target="_top">captures_test.cpp</a>. + </p> +<h5> +<a name="boost_regex.background_information.examples.h1"></a> + <span><a name="boost_regex.background_information.examples.example_programs"></a></span><a class="link" href="examples.html#boost_regex.background_information.examples.example_programs">Example + programs</a> + </h5> +<p> + <span class="bold"><strong>grep</strong></span> + </p> +<p> + A simple grep implementation, run with the -h command line option to find + out its usage. + </p> +<p> + Files: <a href="../../../../example/grep/grep.cpp" target="_top">grep.cpp</a> + </p> +<p> + <span class="bold"><strong>timer.exe</strong></span> + </p> +<p> + A simple interactive expression matching application, the results of all + matches are timed, allowing the programmer to optimize their regular expressions + where performance is critical. + </p> +<p> + Files: <a href="../../../../example/timer/regex_timer.cpp" target="_top">regex_timer.cpp</a>. + </p> +<h5> +<a name="boost_regex.background_information.examples.h2"></a> + <span><a name="boost_regex.background_information.examples.code_snippets"></a></span><a class="link" href="examples.html#boost_regex.background_information.examples.code_snippets">Code + snippets</a> + </h5> +<p> + The snippets examples contain the code examples used in the documentation: + </p> +<p> + <a href="../../../../example/snippets/captures_example.cpp" target="_top">captures_example.cpp</a>: + Demonstrates the use of captures. + </p> +<p> + <a href="../../../../example/snippets/credit_card_example.cpp" target="_top">credit_card_example.cpp</a>: + Credit card number formatting code. + </p> +<p> + <a href="../../../../example/snippets/partial_regex_grep.cpp" target="_top">partial_regex_grep.cpp</a>: + Search example using partial matches. + </p> +<p> + <a href="../../../../example/snippets/partial_regex_match.cpp" target="_top">partial_regex_match.cpp</a>: + regex_match example using partial matches. + </p> +<p> + <a href="../../../../example/snippets/regex_iterator_example.cpp" target="_top">regex_iterator_example.cpp</a>: + Iterating through a series of matches. + </p> +<p> + <a href="../../../../example/snippets/regex_match_example.cpp" target="_top">regex_match_example.cpp</a>: + ftp based regex_match example. + </p> +<p> + <a href="../../../../example/snippets/regex_merge_example.cpp" target="_top">regex_merge_example.cpp</a>: + regex_merge example: converts a C++ file to syntax highlighted HTML. + </p> +<p> + <a href="../../../../example/snippets/regex_replace_example.cpp" target="_top">regex_replace_example.cpp</a>: + regex_replace example: converts a C++ file to syntax highlighted HTML + </p> +<p> + <a href="../../../../example/snippets/regex_search_example.cpp" target="_top">regex_search_example.cpp</a>: + regex_search example: searches a cpp file for class definitions. + </p> +<p> + <a href="../../../../example/snippets/regex_token_iterator_eg_1.cpp" target="_top">regex_token_iterator_eg_1.cpp</a>: + split a string into a series of tokens. + </p> +<p> + <a href="../../../../example/snippets/regex_token_iterator_eg_2.cpp" target="_top">regex_token_iterator_eg_2.cpp</a>: + enumerate the linked URL's in a HTML file. + </p> +<p> + The following are deprecated: + </p> +<p> + <a href="../../../../example/snippets/regex_grep_example_1.cpp" target="_top">regex_grep_example_1.cpp</a>: + regex_grep example 1: searches a cpp file for class definitions. + </p> +<p> + <a href="../../../../example/snippets/regex_grep_example_2.cpp" target="_top">regex_grep_example_2.cpp</a>: + regex_grep example 2: searches a cpp file for class definitions, using a + global callback function. + </p> +<p> + <a href="../../../../example/snippets/regex_grep_example_3.cpp" target="_top">regex_grep_example_3.cpp</a>: + regex_grep example 2: searches a cpp file for class definitions, using a + bound member function callback. + </p> +<p> + <a href="../../../../example/snippets/regex_grep_example_4.cpp" target="_top">regex_grep_example_4.cpp</a>: + regex_grep example 2: searches a cpp file for class definitions, using a + C++ Builder closure as a callback. + </p> +<p> + <a href="../../../../example/snippets/regex_split_example_1.cpp" target="_top">regex_split_example_1.cpp</a>: + regex_split example: split a string into tokens. + </p> +<p> + <a href="../../../../example/snippets/regex_split_example_2.cpp" target="_top">regex_split_example_2.cpp</a> + : regex_split example: spit out linked URL's. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="thread_safety.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="futher.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/faq.html b/libs/regex/doc/html/boost_regex/background_information/faq.html new file mode 100644 index 0000000000..98fc86a91a --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/faq.html @@ -0,0 +1,155 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>FAQ</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="futher.html" title="References and Further Information"> +<link rel="next" href="performance.html" title="Performance"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="futher.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.faq"></a><a class="link" href="faq.html" title="FAQ">FAQ</a> +</h3></div></div></div> +<p> + <span class="bold"><strong>Q.</strong></span> I can't get regex++ to work with escape + characters, what's going on? + </p> +<p> + <span class="bold"><strong>A.</strong></span> If you embed regular expressions in C++ + code, then remember that escape characters are processed twice: once by the + C++ compiler, and once by the Boost.Regex expression compiler, so to pass + the regular expression \d+ to Boost.Regex, you need to embed "\d+" + in your code. Likewise to match a literal backslash you will need to embed + "\\" in your code. + </p> +<p> + <span class="bold"><strong>Q.</strong></span> No matter what I do regex_match always + returns false, what's going on? + </p> +<p> + <span class="bold"><strong>A.</strong></span> The algorithm regex_match only succeeds + if the expression matches <span class="bold"><strong>all</strong></span> of the text, + if you want to <span class="bold"><strong>find</strong></span> a sub-string within + the text that matches the expression then use regex_search instead. + </p> +<p> + <span class="bold"><strong>Q.</strong></span> Why does using parenthesis in a POSIX + regular expression change the result of a match? + </p> +<p> + <span class="bold"><strong>A.</strong></span> For POSIX (extended and basic) regular + expressions, but not for perl regexes, parentheses don't only mark; they + determine what the best match is as well. When the expression is compiled + as a POSIX basic or extended regex then Boost.Regex follows the POSIX standard + leftmost longest rule for determining what matched. So if there is more than + one possible match after considering the whole expression, it looks next + at the first sub-expression and then the second sub-expression and so on. + So... + </p> +<p> + "(0*)([0-9]*)" against "00123" would produce $1 = "00" + $2 = "123" + </p> +<p> + where as + </p> +<p> + "0*([0-9])*" against "00123" would produce $1 = "00123" + </p> +<p> + If you think about it, had $1 only matched the "123", this would + be "less good" than the match "00123" which is both further + to the left and longer. If you want $1 to match only the "123" + part, then you need to use something like: + </p> +<p> + "0*([1-9][0-9]*)" + </p> +<p> + as the expression. + </p> +<p> + <span class="bold"><strong>Q.</strong></span> Why don't character ranges work properly + (POSIX mode only)? + </p> +<p> + <span class="bold"><strong>A.</strong></span> The POSIX standard specifies that character + range expressions are locale sensitive - so for example the expression [A-Z] + will match any collating element that collates between 'A' and 'Z'. That + means that for most locales other than "C" or "POSIX", + [A-Z] would match the single character 't' for example, which is not what + most people expect - or at least not what most people have come to expect + from regular expression engines. For this reason, the default behaviour of + Boost.Regex (perl mode) is to turn locale sensitive collation off by not + setting the <code class="computeroutput"><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">collate</span></code> + compile time flag. However if you set a non-default compile time flag - for + example <code class="computeroutput"><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">extended</span></code> or <code class="computeroutput"><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">basic</span></code>, + then locale dependent collation will be enabled, this also applies to the + POSIX API functions which use either <code class="computeroutput"><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">extended</span></code> + or <code class="computeroutput"><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">basic</span></code> internally. [Note - when <code class="computeroutput"><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">nocollate</span></code> in effect, the library behaves + "as if" the LC_COLLATE locale category were always "C", + regardless of what its actually set to - end note]. + </p> +<p> + <span class="bold"><strong>Q.</strong></span> Why are there no throw specifications + on any of the functions? What exceptions can the library throw? + </p> +<p> + <span class="bold"><strong>A.</strong></span> Not all compilers support (or honor) + throw specifications, others support them but with reduced efficiency. Throw + specifications may be added at a later date as compilers begin to handle + this better. The library should throw only three types of exception: [boost::regex_error] + can be thrown by <a class="link" href="../ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> when compiling a regular + expression, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> can be thrown when a call + to <code class="computeroutput"><span class="identifier">basic_regex</span><span class="special">::</span><span class="identifier">imbue</span></code> tries to open a message catalogue + that doesn't exist, or when a call to <a class="link" href="../ref/regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="../ref/regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> results in an "everlasting" + search, or when a call to <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">::</span><span class="identifier">GrepFiles</span></code> + or <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">::</span><span class="identifier">FindFiles</span></code> tries to open a file that cannot + be opened, finally <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> can be thrown by just about any + of the functions in this library. + </p> +<p> + <span class="bold"><strong>Q.</strong></span> Why can't I use the "convenience" + versions of regex_match / regex_search / regex_grep / regex_format / regex_merge? + </p> +<p> + <span class="bold"><strong>A.</strong></span> These versions may or may not be available + depending upon the capabilities of your compiler, the rules determining the + format of these functions are quite complex - and only the versions visible + to a standard compliant compiler are given in the help. To find out what + your compiler supports, run <boost/regex.hpp> through your C++ pre-processor, + and search the output file for the function that you are interested in. Note + however, that very few current compilers still have problems with these overloaded + functions. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="futher.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/futher.html b/libs/regex/doc/html/boost_regex/background_information/futher.html new file mode 100644 index 0000000000..1e4c4114d1 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/futher.html @@ -0,0 +1,76 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>References and Further Information</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="examples.html" title="Test and Example Programs"> +<link rel="next" href="faq.html" title="FAQ"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="examples.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="faq.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.futher"></a><a class="link" href="futher.html" title="References and Further Information">References + and Further Information</a> +</h3></div></div></div> +<p> + Short tutorials on regular expressions can be <a href="http://etext.lib.virginia.edu/helpsheets/regex.html" target="_top">found + here</a> and <a href="http://www.linuxpcug.org/lessons/regexp.html" target="_top">here</a>. + </p> +<p> + The main book on regular expressions is <a href="http://www.oreilly.com/catalog/regex/" target="_top">Mastering + Regular Expressions, published by O'Reilly</a>. + </p> +<p> + Boost.Regex forms the basis for the regular expression chapter of the <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">Technical + Report on C++ Library Extensions</a>. + </p> +<p> + The <a href="http://www.opengroup.org/onlinepubs/7908799/toc.htm" target="_top">Open + Unix Specification</a> contains a wealth of useful material, including + the POSIX regular expression syntax. + </p> +<p> + The <a href="http://www.cs.ucr.edu/~stelo/pattern.html" target="_top">Pattern Matching + Pointers</a> site is a "must visit" resource for anyone interested + in pattern matching. + </p> +<p> + <a href="http://glimpse.cs.arizona.edu/" target="_top">Glimpse and Agrep</a>, use + a simplified regular expression syntax to achieve faster search times. + </p> +<p> + <a href="http://glimpse.cs.arizona.edu/udi.html" target="_top">Udi Manber</a> and + <a href="http://www.dcc.uchile.cl/~rbaeza/" target="_top">Ricardo Baeza-Yates</a> + both have a selection of useful pattern matching papers available from their + respective web sites. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="examples.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="faq.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/headers.html b/libs/regex/doc/html/boost_regex/background_information/headers.html new file mode 100644 index 0000000000..d3988ba728 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/headers.html @@ -0,0 +1,54 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Headers</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="../background_information.html" title="Background Information"> +<link rel="next" href="locale.html" title="Localization"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../background_information.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="locale.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.headers"></a><a class="link" href="headers.html" title="Headers">Headers</a> +</h3></div></div></div> +<p> + There are two main headers used by this library: <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + provides full access to the main template library, while <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cregex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + provides access to the (deprecated) high level class RegEx, and the POSIX + API functions. + </p> +<p> + There is also a header containing only forward declarations <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + for use when an interface is dependent upon <a class="link" href="../ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>, but otherwise does + not need the full definitions. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../background_information.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="locale.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/history.html b/libs/regex/doc/html/boost_regex/background_information/history.html new file mode 100644 index 0000000000..886728b55f --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/history.html @@ -0,0 +1,342 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>History</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="acknowledgements.html" title="Acknowledgements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="acknowledgements.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.history"></a><a class="link" href="history.html" title="History">History</a> +</h3></div></div></div> +<p> + New issues should be submitted at <a href="http://svn.boost.org" target="_top">svn.boost.org</a> + - don't forget to include your email address in the ticket! + </p> +<p> + Currently open issues can be viewed <a href="https://svn.boost.org/trac/boost/query?status=assigned&status=new&status=reopened&component=regex&order=priority&col=id&col=summary&col=status&col=type&col=milestone&col=component" target="_top">here</a>. + </p> +<p> + All issues including closed ones can be viewed <a href="https://svn.boost.org/trac/boost/query?status=assigned&status=closed&status=new&status=reopened&component=regex&order=priority&col=id&col=summary&col=status&col=type&col=milestone&col=component" target="_top">here</a>. + </p> +<h5> +<a name="boost_regex.background_information.history.h0"></a> + <span><a name="boost_regex.background_information.history.boost_1_48"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_48">Boost-1.48</a> + </h5> +<p> + Fixed issues: <a href="https://svn.boost.org/trac/boost/ticket/688" target="_top">#698</a>, + <a href="https://svn.boost.org/trac/boost/ticket/5835" target="_top">#5835</a>, + <a href="https://svn.boost.org/trac/boost/ticket/5958" target="_top">#5958</a>, + <a href="https://svn.boost.org/trac/boost/ticket/5736" target="_top">#5736</a>. + </p> +<h5> +<a name="boost_regex.background_information.history.h1"></a> + <span><a name="boost_regex.background_information.history.boost_1_47"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_47">Boost 1.47</a> + </h5> +<p> + Fixed issues: <a href="https://svn.boost.org/trac/boost/ticket/5223" target="_top">#5223</a>, + <a href="https://svn.boost.org/trac/boost/ticket/5353" target="_top">#5353</a>, + <a href="https://svn.boost.org/trac/boost/ticket/5363" target="_top">#5363</a>, + <a href="https://svn.boost.org/trac/boost/ticket/5462" target="_top">#5462</a>, + <a href="https://svn.boost.org/trac/boost/ticket/5472" target="_top">#5472</a>, + <a href="https://svn.boost.org/trac/boost/ticket/5504" target="_top">#5504</a>. + </p> +<h5> +<a name="boost_regex.background_information.history.h2"></a> + <span><a name="boost_regex.background_information.history.boost_1_44"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_44">Boost 1.44</a> + </h5> +<p> + Fixed issues: <a href="https://svn.boost.org/trac/boost/ticket/4309" target="_top">#4309</a>, + <a href="https://svn.boost.org/trac/boost/ticket/4215" target="_top">#4215</a>, + <a href="https://svn.boost.org/trac/boost/ticket/4212" target="_top">#4212</a>, + <a href="https://svn.boost.org/trac/boost/ticket/4191" target="_top">#4191</a>, + <a href="https://svn.boost.org/trac/boost/ticket/4132" target="_top">#4132</a>, + <a href="https://svn.boost.org/trac/boost/ticket/4123" target="_top">#4123</a>, + <a href="https://svn.boost.org/trac/boost/ticket/4114" target="_top">#4114</a>, + <a href="https://svn.boost.org/trac/boost/ticket/4036" target="_top">#4036</a>, + <a href="https://svn.boost.org/trac/boost/ticket/4020" target="_top">#4020</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3941" target="_top">#3941</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3902" target="_top">#3902</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3890" target="_top">#3890</a> + </p> +<h5> +<a name="boost_regex.background_information.history.h3"></a> + <span><a name="boost_regex.background_information.history.boost_1_42"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_42">Boost 1.42</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Added support for Functors rather than strings as format expressions. + </li> +<li class="listitem"> + Improved error reporting when throwing exceptions to include better more + relevant information. + </li> +<li class="listitem"> + Improved performance and reduced stack usage of recursive expressions. + </li> +<li class="listitem"> + Fixed tickets <a href="https://svn.boost.org/trac/boost/ticket/2802" target="_top">#2802</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3425" target="_top">#3425</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3507" target="_top">#3507</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3546" target="_top">#3546</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3631" target="_top">#3631</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3632" target="_top">#3632</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3715" target="_top">#3715</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3718" target="_top">#3718</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3763" target="_top">#3763</a>, + <a href="https://svn.boost.org/trac/boost/ticket/3764" target="_top">#3764</a> + </li> +</ul></div> +<h5> +<a name="boost_regex.background_information.history.h4"></a> + <span><a name="boost_regex.background_information.history.boost_1_40"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_40">Boost 1.40</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + Added support for many Perl 5.10 syntax elements including named sub-expressions, + branch resets and recursive regular expressions. + </li></ul></div> +<h5> +<a name="boost_regex.background_information.history.h5"></a> + <span><a name="boost_regex.background_information.history.boost_1_38"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_38">Boost 1.38</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <span class="bold"><strong>Breaking change</strong></span>: empty expressions, + and empty alternatives are now allowed when using the Perl regular expression + syntax. This change has been added for Perl compatibility, when the new + <a class="link" href="../ref/syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> + <span class="emphasis"><em>no_empty_expressions</em></span> is set then the old behaviour + is preserved and empty expressions are prohibited. This is issue <a href="https://svn.boost.org/trac/boost/ticket/1081" target="_top">#1081</a>. + </li> +<li class="listitem"> + Added support for Perl style ${n} expressions in format strings (issue + <a href="https://svn.boost.org/trac/boost/ticket/2556" target="_top">#2556</a>). + </li> +<li class="listitem"> + Added support for accessing the location of sub-expressions within the + regular expression string (issue <a href="https://svn.boost.org/trac/boost/ticket/2269" target="_top">#2269</a>). + </li> +<li class="listitem"> + Fixed compiler compatibility issues <a href="https://svn.boost.org/trac/boost/ticket/2244" target="_top">#2244</a>, + <a href="https://svn.boost.org/trac/boost/ticket/2514" target="_top">#2514</a>, + and <a href="https://svn.boost.org/trac/boost/ticket/2244" target="_top">#2458</a>. + </li> +</ul></div> +<h5> +<a name="boost_regex.background_information.history.h6"></a> + <span><a name="boost_regex.background_information.history.boost_1_34"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_34">Boost 1.34</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Fix for non-greedy repeats and partial matches not working correctly + in some cases. + </li> +<li class="listitem"> + Fix for non-greedy repeats on VC++ not working in some cases (bug report + 1515830). + </li> +<li class="listitem"> + Changed match_results::position() to return a valid result when *this + represents a partial match. + </li> +<li class="listitem"> + Fixed the grep and egrep options so that the newline character gets treated + the same as |. + </li> +</ul></div> +<h5> +<a name="boost_regex.background_information.history.h7"></a> + <span><a name="boost_regex.background_information.history.boost_1_33_1"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_33_1">Boost 1.33.1</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Fixed broken makefiles. + </li> +<li class="listitem"> + Fixed configuration setup to allow building with VC7.1 - STLport-4.6.2 + when using /Zc:wchar_t. + </li> +<li class="listitem"> + Moved declarations class-inline in static_mutex.hpp so that SGI Irix + compiler can cope. + </li> +<li class="listitem"> + Added needed standard library #includes to fileiter.hpp, regex_workaround.hpp + and cpp_regex_traits.hpp. + </li> +<li class="listitem"> + Fixed a bug where non-greedy repeats could in certain strange curcumstances + repeat more times than their maximum value. + </li> +<li class="listitem"> + Fixed the value returned by basic_regex<>::empty() from a default + constructed object. + </li> +<li class="listitem"> + Changed the deffinition of regex_error to make it backwards compatible + with Boost-1.32.0. + </li> +<li class="listitem"> + Disabled external templates for Intel C++ 8.0 and earlier - otherwise + unresolved references can occur. + </li> +<li class="listitem"> + Rewritten extern template code for gcc so that only specific member functions + are exported: otherwise strange unresolved references can occur when + linking and mixing debug and non-debug code. + </li> +<li class="listitem"> + Initialise all the data members of the unicode_iterators: this keeps + gcc from issuing needless warnings. + </li> +<li class="listitem"> + Ported the ICU integration code to VC6 and VC7. + </li> +<li class="listitem"> + Ensured code is STLport debug mode clean. + </li> +<li class="listitem"> + Fixed lookbehind assertions so that fixed length repeats are permitted, + and so that regex iteration allows lookbehind to look back before the + current search range (into the last match). + </li> +<li class="listitem"> + Fixed strange bug with non-greedy repeats inside forward lookahead assertions. + </li> +<li class="listitem"> + Enabled negated character classes inside character sets. + </li> +<li class="listitem"> + Fixed regression so that [a-z-] is a valid expression again. + </li> +<li class="listitem"> + Fixed bug that allowed some invalid expressions to be accepted. + </li> +</ul></div> +<h5> +<a name="boost_regex.background_information.history.h8"></a> + <span><a name="boost_regex.background_information.history.boost_1_33_0"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_33_0">Boost 1.33.0</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Completely rewritten expression parsing code, and traits class support; + now conforms to the standardization proposal. + </li> +<li class="listitem"> + Breaking Change: The syntax options that can be passed to basic_regex + constructors have been rationalized. The default option (perl) now has + a value of zero, and it is now clearly documented which options apply + to which regular expression syntax styles (perl, POSIX-extended, POSIX-basic + etc). Some of the more esoteric options have now been removed, so there + is the possibility that existing code may fail to compile: however equivalent + functionality should still be available. + </li> +<li class="listitem"> + Breaking Change: POSIX-extended and POSIX-basic regular expressions now + enforce the letter of the POSIX standard much more closely than before. + </li> +<li class="listitem"> + Added support for (?imsx-imsx) constructs. + </li> +<li class="listitem"> + Added support for lookbehind expressions (?<=positive-lookbehind) + and (?<!negative-lookbehind). + </li> +<li class="listitem"> + Added support for conditional expressions (?(assertion)true-expresion|false-expression). + </li> +<li class="listitem"> + Added MFC/ATL string wrappers. + </li> +<li class="listitem"> + Added Unicode support; based on ICU. + </li> +<li class="listitem"> + Changed newline support to recognise \f as a line separator (all character + types), and \x85 as a line separator for wide characters / Unicode only. + </li> +<li class="listitem"> + Added a new format flag format_literal that treats the replace string + as a literal, rather than a Perl or Sed style format string. + </li> +<li class="listitem"> + Errors are now reported by throwing exceptions of type regex_error. The + types used previously - bad_expression and bad_pattern - are now just + typedefs for regex_error. Type regex_error has a couple of new members: + code() to report an error code rather than a string, and position() to + report where in the expression the error occurred. + </li> +</ul></div> +<h5> +<a name="boost_regex.background_information.history.h9"></a> + <span><a name="boost_regex.background_information.history.boost_1_32_1"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_32_1">Boost 1.32.1</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + Fixed bug in partial matches of bounded repeats of '.'. + </li></ul></div> +<h5> +<a name="boost_regex.background_information.history.h10"></a> + <span><a name="boost_regex.background_information.history.boost_1_31_0"></a></span><a class="link" href="history.html#boost_regex.background_information.history.boost_1_31_0">Boost 1.31.0</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Completely rewritten pattern matching code - it is now up to 10 times + faster than before. + </li> +<li class="listitem"> + Reorganized documentation. + </li> +<li class="listitem"> + Deprecated all interfaces that are not part of the regular expression + standardization proposal. + </li> +<li class="listitem"> + Added regex_iterator and regex_token_iterator . + </li> +<li class="listitem"> + Added support for Perl style independent sub-expressions. + </li> +<li class="listitem"> + Added non-member operators to the sub_match class, so that you can compare + sub_match's with strings, or add them to a string to produce a new string. + </li> +<li class="listitem"> + Added experimental support for extended capture information. + </li> +<li class="listitem"> + Changed the match flags so that they are a distinct type (not an integer), + if you try to pass the match flags as an integer rather than match_flag_type + to the regex algorithms then you will now get a compiler error. + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="acknowledgements.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/locale.html b/libs/regex/doc/html/boost_regex/background_information/locale.html new file mode 100644 index 0000000000..713e28b84c --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/locale.html @@ -0,0 +1,1759 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Localization</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="headers.html" title="Headers"> +<link rel="next" href="thread_safety.html" title="Thread Safety"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="headers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="thread_safety.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.locale"></a><a class="link" href="locale.html" title="Localization">Localization</a> +</h3></div></div></div> +<p> + Boost.Regex provides extensive support for run-time localization, the localization + model used can be split into two parts: front-end and back-end. + </p> +<p> + Front-end localization deals with everything which the user sees - error + messages, and the regular expression syntax itself. For example a French + application could change [[:word:]] to [[:mot:]] and \w to \m. Modifying + the front end locale requires active support from the developer, by providing + the library with a message catalogue to load, containing the localized strings. + Front-end locale is affected by the LC_MESSAGES category only. + </p> +<p> + Back-end localization deals with everything that occurs after the expression + has been parsed - in other words everything that the user does not see or + interact with directly. It deals with case conversion, collation, and character + class membership. The back-end locale does not require any intervention from + the developer - the library will acquire all the information it requires + for the current locale from the underlying operating system / run time library. + This means that if the program user does not interact with regular expressions + directly - for example if the expressions are embedded in your C++ code - + then no explicit localization is required, as the library will take care + of everything for you. For example embedding the expression [[:word:]]+ in + your code will always match a whole word, if the program is run on a machine + with, for example, a Greek locale, then it will still match a whole word, + but in Greek characters rather than Latin ones. The back-end locale is affected + by the LC_TYPE and LC_COLLATE categories. + </p> +<p> + There are three separate localization mechanisms supported by Boost.Regex: + </p> +<h5> +<a name="boost_regex.background_information.locale.h0"></a> + <span><a name="boost_regex.background_information.locale.win32_localization_model_"></a></span><a class="link" href="locale.html#boost_regex.background_information.locale.win32_localization_model_">Win32 + localization model.</a> + </h5> +<p> + This is the default model when the library is compiled under Win32, and is + encapsulated by the traits class <code class="computeroutput"><span class="identifier">w32_regex_traits</span></code>. + When this model is in effect each <a class="link" href="../ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> object gets it's own + LCID, by default this is the users default setting as returned by GetUserDefaultLCID, + but you can call imbue on the <code class="computeroutput"><span class="identifier">basic_regex</span></code> + object to set it's locale to some other LCID if you wish. All the settings + used by Boost.Regex are acquired directly from the operating system bypassing + the C run time library. Front-end localization requires a resource dll, containing + a string table with the user-defined strings. The traits class exports the + function: + </p> +<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">set_message_catalogue</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">);</span> +</pre> +<p> + which needs to be called with a string identifying the name of the resource + dll, before your code compiles any regular expressions (but not necessarily + before you construct any <code class="computeroutput"><span class="identifier">basic_regex</span></code> + instances): + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">w32_regex_traits</span><span class="special"><</span><span class="keyword">char</span><span class="special">>::</span><span class="identifier">set_message_catalogue</span><span class="special">(</span><span class="string">"mydll.dll"</span><span class="special">);</span> +</pre> +<p> + The library provides full Unicode support under NT, under Windows 9x the + library degrades gracefully - characters 0 to 255 are supported, the remainder + are treated as "unknown" graphic characters. + </p> +<h5> +<a name="boost_regex.background_information.locale.h1"></a> + <span><a name="boost_regex.background_information.locale.c_localization_model_"></a></span><a class="link" href="locale.html#boost_regex.background_information.locale.c_localization_model_">C + localization model.</a> + </h5> +<p> + This model has been deprecated in favor of the C++ locale for all non-Windows + compilers that support it. This locale is encapsulated by the traits class + <code class="computeroutput"><span class="identifier">c_regex_traits</span></code>, Win32 users + can force this model to take effect by defining the pre-processor symbol + BOOST_REGEX_USE_C_LOCALE. When this model is in effect there is a single + global locale, as set by <code class="computeroutput"><span class="identifier">setlocale</span></code>. + All settings are acquired from your run time library, consequently Unicode + support is dependent upon your run time library implementation. + </p> +<p> + Front end localization is not supported. + </p> +<p> + Note that calling setlocale invalidates all compiled regular expressions, + calling <code class="computeroutput"><span class="identifier">setlocale</span><span class="special">(</span><span class="identifier">LC_ALL</span><span class="special">,</span> <span class="string">"C"</span><span class="special">)</span></code> + will make this library behave equivalent to most traditional regular expression + libraries including version 1 of this library. + </p> +<h5> +<a name="boost_regex.background_information.locale.h2"></a> + <span><a name="boost_regex.background_information.locale.c___localization_model_"></a></span><a class="link" href="locale.html#boost_regex.background_information.locale.c___localization_model_">C++ + localization model.</a> + </h5> +<p> + This model is the default for non-Windows compilers. + </p> +<p> + When this model is in effect each instance of <a class="link" href="../ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> has its own instance + of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span></code>, class <a class="link" href="../ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> also has a member function + <code class="computeroutput"><span class="identifier">imbue</span></code> which allows the locale + for the expression to be set on a per-instance basis. Front end localization + requires a POSIX message catalogue, which will be loaded via the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">messages</span></code> + facet of the expression's locale, the traits class exports the symbol: + </p> +<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">set_message_catalogue</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">);</span> +</pre> +<p> + which needs to be called with a string identifying the name of the message + catalogue, before your code compiles any regular expressions (but not necessarily + before you construct any basic_regex instances): + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">cpp_regex_traits</span><span class="special"><</span><span class="keyword">char</span><span class="special">>::</span><span class="identifier">set_message_catalogue</span><span class="special">(</span><span class="string">"mycatalogue"</span><span class="special">);</span> +</pre> +<p> + Note that calling <code class="computeroutput"><span class="identifier">basic_regex</span><span class="special"><>::</span><span class="identifier">imbue</span></code> + will invalidate any expression currently compiled in that instance of <a class="link" href="../ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>. + </p> +<p> + Finally note that if you build the library with a non-default localization + model, then the appropriate pre-processor symbol (BOOST_REGEX_USE_C_LOCALE + or BOOST_REGEX_USE_CPP_LOCALE) must be defined both when you build the support + library, and when you include <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + or <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cregex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + in your code. The best way to ensure this is to add the #define to <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">user</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>. + </p> +<h5> +<a name="boost_regex.background_information.locale.h3"></a> + <span><a name="boost_regex.background_information.locale.providing_a_message_catalogue"></a></span><a class="link" href="locale.html#boost_regex.background_information.locale.providing_a_message_catalogue">Providing + a message catalogue</a> + </h5> +<p> + In order to localize the front end of the library, you need to provide the + library with the appropriate message strings contained either in a resource + dll's string table (Win32 model), or a POSIX message catalogue (C++ models). + In the latter case the messages must appear in message set zero of the catalogue. + The messages and their id's are as follows: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Message + </p> + </th> +<th> + <p> + id + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +<th> + <p> + Default value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + 101 + </p> + </td> +<td> + <p> + The character used to start a sub-expression. + </p> + </td> +<td> + <p> + "(" + </p> + </td> +</tr> +<tr> +<td> + <p> + 102 + </p> + </td> +<td> + <p> + The character used to end a sub-expression declaration. + </p> + </td> +<td> + <p> + ")" + </p> + </td> +</tr> +<tr> +<td> + <p> + 103 + </p> + </td> +<td> + <p> + The character used to denote an end of line assertion. + </p> + </td> +<td> + <p> + "$" + </p> + </td> +</tr> +<tr> +<td> + <p> + 104 + </p> + </td> +<td> + <p> + The character used to denote the start of line assertion. + </p> + </td> +<td> + <p> + "^" + </p> + </td> +</tr> +<tr> +<td> + <p> + 105 + </p> + </td> +<td> + <p> + The character used to denote the "match any character expression". + </p> + </td> +<td> + <p> + "." + </p> + </td> +</tr> +<tr> +<td> + <p> + 106 + </p> + </td> +<td> + <p> + The match zero or more times repetition operator. + </p> + </td> +<td> + <p> + "*" + </p> + </td> +</tr> +<tr> +<td> + <p> + 107 + </p> + </td> +<td> + <p> + The match one or more repetition operator. + </p> + </td> +<td> + <p> + "+" + </p> + </td> +</tr> +<tr> +<td> + <p> + 108 + </p> + </td> +<td> + <p> + The match zero or one repetition operator. + </p> + </td> +<td> + <p> + "?" + </p> + </td> +</tr> +<tr> +<td> + <p> + 109 + </p> + </td> +<td> + <p> + The character set opening character. + </p> + </td> +<td> + <p> + "[" + </p> + </td> +</tr> +<tr> +<td> + <p> + 110 + </p> + </td> +<td> + <p> + The character set closing character. + </p> + </td> +<td> + <p> + "]" + </p> + </td> +</tr> +<tr> +<td> + <p> + 111 + </p> + </td> +<td> + <p> + The alternation operator. + </p> + </td> +<td> + <p> + "|" + </p> + </td> +</tr> +<tr> +<td> + <p> + 112 + </p> + </td> +<td> + <p> + The escape character. + </p> + </td> +<td> + <p> + "\" + </p> + </td> +</tr> +<tr> +<td> + <p> + 113 + </p> + </td> +<td> + <p> + The hash character (not currently used). + </p> + </td> +<td> + <p> + "#" + </p> + </td> +</tr> +<tr> +<td> + <p> + 114 + </p> + </td> +<td> + <p> + The range operator. + </p> + </td> +<td> + <p> + "-" + </p> + </td> +</tr> +<tr> +<td> + <p> + 115 + </p> + </td> +<td> + <p> + The repetition operator opening character. + </p> + </td> +<td> + <p> + "{" + </p> + </td> +</tr> +<tr> +<td> + <p> + 116 + </p> + </td> +<td> + <p> + The repetition operator closing character. + </p> + </td> +<td> + <p> + "}" + </p> + </td> +</tr> +<tr> +<td> + <p> + 117 + </p> + </td> +<td> + <p> + The digit characters. + </p> + </td> +<td> + <p> + "0123456789" + </p> + </td> +</tr> +<tr> +<td> + <p> + 118 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the word boundary assertion. + </p> + </td> +<td> + <p> + "b" + </p> + </td> +</tr> +<tr> +<td> + <p> + 119 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the non-word boundary assertion. + </p> + </td> +<td> + <p> + "B" + </p> + </td> +</tr> +<tr> +<td> + <p> + 120 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the word-start boundary assertion. + </p> + </td> +<td> + <p> + "<" + </p> + </td> +</tr> +<tr> +<td> + <p> + 121 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the word-end boundary assertion. + </p> + </td> +<td> + <p> + ">" + </p> + </td> +</tr> +<tr> +<td> + <p> + 122 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any word character. + </p> + </td> +<td> + <p> + "w" + </p> + </td> +</tr> +<tr> +<td> + <p> + 123 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + a non-word character. + </p> + </td> +<td> + <p> + "W" + </p> + </td> +</tr> +<tr> +<td> + <p> + 124 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + a start of buffer assertion. + </p> + </td> +<td> + <p> + "`A" + </p> + </td> +</tr> +<tr> +<td> + <p> + 125 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + an end of buffer assertion. + </p> + </td> +<td> + <p> + "'z" + </p> + </td> +</tr> +<tr> +<td> + <p> + 126 + </p> + </td> +<td> + <p> + The newline character. + </p> + </td> +<td> + <p> + "\n" + </p> + </td> +</tr> +<tr> +<td> + <p> + 127 + </p> + </td> +<td> + <p> + The comma separator. + </p> + </td> +<td> + <p> + "," + </p> + </td> +</tr> +<tr> +<td> + <p> + 128 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the bell character. + </p> + </td> +<td> + <p> + "a" + </p> + </td> +</tr> +<tr> +<td> + <p> + 129 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the form feed character. + </p> + </td> +<td> + <p> + "f" + </p> + </td> +</tr> +<tr> +<td> + <p> + 130 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the newline character. + </p> + </td> +<td> + <p> + "n" + </p> + </td> +</tr> +<tr> +<td> + <p> + 131 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the carriage return character. + </p> + </td> +<td> + <p> + "r" + </p> + </td> +</tr> +<tr> +<td> + <p> + 132 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the tab character. + </p> + </td> +<td> + <p> + "t" + </p> + </td> +</tr> +<tr> +<td> + <p> + 133 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the vertical tab character. + </p> + </td> +<td> + <p> + "v" + </p> + </td> +</tr> +<tr> +<td> + <p> + 134 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the start of a hexadecimal character constant. + </p> + </td> +<td> + <p> + "x" + </p> + </td> +</tr> +<tr> +<td> + <p> + 135 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the start of an ASCII escape character. + </p> + </td> +<td> + <p> + "c" + </p> + </td> +</tr> +<tr> +<td> + <p> + 136 + </p> + </td> +<td> + <p> + The colon character. + </p> + </td> +<td> + <p> + ":" + </p> + </td> +</tr> +<tr> +<td> + <p> + 137 + </p> + </td> +<td> + <p> + The equals character. + </p> + </td> +<td> + <p> + "=" + </p> + </td> +</tr> +<tr> +<td> + <p> + 138 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the ASCII escape character. + </p> + </td> +<td> + <p> + "e" + </p> + </td> +</tr> +<tr> +<td> + <p> + 139 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any lower case character. + </p> + </td> +<td> + <p> + "l" + </p> + </td> +</tr> +<tr> +<td> + <p> + 140 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any non-lower case character. + </p> + </td> +<td> + <p> + "L" + </p> + </td> +</tr> +<tr> +<td> + <p> + 141 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any upper case character. + </p> + </td> +<td> + <p> + "u" + </p> + </td> +</tr> +<tr> +<td> + <p> + 142 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any non-upper case character. + </p> + </td> +<td> + <p> + "U" + </p> + </td> +</tr> +<tr> +<td> + <p> + 143 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any space character. + </p> + </td> +<td> + <p> + "s" + </p> + </td> +</tr> +<tr> +<td> + <p> + 144 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any non-space character. + </p> + </td> +<td> + <p> + "S" + </p> + </td> +</tr> +<tr> +<td> + <p> + 145 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any digit character. + </p> + </td> +<td> + <p> + "d" + </p> + </td> +</tr> +<tr> +<td> + <p> + 146 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any non-digit character. + </p> + </td> +<td> + <p> + "D" + </p> + </td> +</tr> +<tr> +<td> + <p> + 147 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the end quote operator. + </p> + </td> +<td> + <p> + "E" + </p> + </td> +</tr> +<tr> +<td> + <p> + 148 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the start quote operator. + </p> + </td> +<td> + <p> + "Q" + </p> + </td> +</tr> +<tr> +<td> + <p> + 149 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + a Unicode combining character sequence. + </p> + </td> +<td> + <p> + "X" + </p> + </td> +</tr> +<tr> +<td> + <p> + 150 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + any single character. + </p> + </td> +<td> + <p> + "C" + </p> + </td> +</tr> +<tr> +<td> + <p> + 151 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + end of buffer operator. + </p> + </td> +<td> + <p> + "Z" + </p> + </td> +</tr> +<tr> +<td> + <p> + 152 + </p> + </td> +<td> + <p> + The character which when preceded by an escape character represents + the continuation assertion. + </p> + </td> +<td> + <p> + "G" + </p> + </td> +</tr> +<tr> +<td> + <p> + 153 + </p> + </td> +<td> + <p> + The character which when preceeded by (? indicates a zero width + negated forward lookahead assert. + </p> + </td> +<td> + <p> + ! + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Custom error messages are loaded as follows: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Message ID + </p> + </th> +<th> + <p> + Error message ID + </p> + </th> +<th> + <p> + Default string + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + 201 + </p> + </td> +<td> + <p> + REG_NOMATCH + </p> + </td> +<td> + <p> + "No match" + </p> + </td> +</tr> +<tr> +<td> + <p> + 202 + </p> + </td> +<td> + <p> + REG_BADPAT + </p> + </td> +<td> + <p> + "Invalid regular expression" + </p> + </td> +</tr> +<tr> +<td> + <p> + 203 + </p> + </td> +<td> + <p> + REG_ECOLLATE + </p> + </td> +<td> + <p> + "Invalid collation character" + </p> + </td> +</tr> +<tr> +<td> + <p> + 204 + </p> + </td> +<td> + <p> + REG_ECTYPE + </p> + </td> +<td> + <p> + "Invalid character class name" + </p> + </td> +</tr> +<tr> +<td> + <p> + 205 + </p> + </td> +<td> + <p> + REG_EESCAPE + </p> + </td> +<td> + <p> + "Trailing backslash" + </p> + </td> +</tr> +<tr> +<td> + <p> + 206 + </p> + </td> +<td> + <p> + REG_ESUBREG + </p> + </td> +<td> + <p> + "Invalid back reference" + </p> + </td> +</tr> +<tr> +<td> + <p> + 207 + </p> + </td> +<td> + <p> + REG_EBRACK + </p> + </td> +<td> + <p> + "Unmatched [ or <code class="literal">" </code> + </p> + </td> +<td> + <p> + [208 + </p> + </td> +<td> + <p> + REG_EPAREN + </p> + </td> +<td> + <p> + "Unmatched ( or \(" + </p> + </td> +</tr> +<tr> +<td> + <p> + 209 + </p> + </td> +<td> + <p> + REG_EBRACE + </p> + </td> +<td> + <p> + "Unmatched \{" + </p> + </td> +</tr> +<tr> +<td> + <p> + 210 + </p> + </td> +<td> + <p> + REG_BADBR + </p> + </td> +<td> + <p> + "Invalid content of \{\}" + </p> + </td> +</tr> +<tr> +<td> + <p> + 211 + </p> + </td> +<td> + <p> + REG_ERANGE + </p> + </td> +<td> + <p> + "Invalid range end" + </p> + </td> +</tr> +<tr> +<td> + <p> + 212 + </p> + </td> +<td> + <p> + REG_ESPACE + </p> + </td> +<td> + <p> + "Memory exhausted" + </p> + </td> +</tr> +<tr> +<td> + <p> + 213 + </p> + </td> +<td> + <p> + REG_BADRPT + </p> + </td> +<td> + <p> + "Invalid preceding regular expression" + </p> + </td> +</tr> +<tr> +<td> + <p> + 214 + </p> + </td> +<td> + <p> + REG_EEND + </p> + </td> +<td> + <p> + "Premature end of regular expression" + </p> + </td> +</tr> +<tr> +<td> + <p> + 215 + </p> + </td> +<td> + <p> + REG_ESIZE + </p> + </td> +<td> + <p> + "Regular expression too big" + </p> + </td> +</tr> +<tr> +<td> + <p> + 216 + </p> + </td> +<td> + <p> + REG_ERPAREN + </p> + </td> +<td> + <p> + "Unmatched ) or \)" + </p> + </td> +</tr> +<tr> +<td> + <p> + 217 + </p> + </td> +<td> + <p> + REG_EMPTY + </p> + </td> +<td> + <p> + "Empty expression" + </p> + </td> +</tr> +<tr> +<td> + <p> + 218 + </p> + </td> +<td> + <p> + REG_E_UNKNOWN + </p> + </td> +<td> + <p> + "Unknown error" + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Custom character class names are loaded as followed: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Message ID + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Equivalent default class name + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + 300 + </p> + </td> +<td> + <p> + The character class name for alphanumeric characters. + </p> + </td> +<td> + <p> + "alnum" + </p> + </td> +</tr> +<tr> +<td> + <p> + 301 + </p> + </td> +<td> + <p> + The character class name for alphabetic characters. + </p> + </td> +<td> + <p> + "alpha" + </p> + </td> +</tr> +<tr> +<td> + <p> + 302 + </p> + </td> +<td> + <p> + The character class name for control characters. + </p> + </td> +<td> + <p> + "cntrl" + </p> + </td> +</tr> +<tr> +<td> + <p> + 303 + </p> + </td> +<td> + <p> + The character class name for digit characters. + </p> + </td> +<td> + <p> + "digit" + </p> + </td> +</tr> +<tr> +<td> + <p> + 304 + </p> + </td> +<td> + <p> + The character class name for graphics characters. + </p> + </td> +<td> + <p> + "graph" + </p> + </td> +</tr> +<tr> +<td> + <p> + 305 + </p> + </td> +<td> + <p> + The character class name for lower case characters. + </p> + </td> +<td> + <p> + "lower" + </p> + </td> +</tr> +<tr> +<td> + <p> + 306 + </p> + </td> +<td> + <p> + The character class name for printable characters. + </p> + </td> +<td> + <p> + "print" + </p> + </td> +</tr> +<tr> +<td> + <p> + 307 + </p> + </td> +<td> + <p> + The character class name for punctuation characters. + </p> + </td> +<td> + <p> + "punct" + </p> + </td> +</tr> +<tr> +<td> + <p> + 308 + </p> + </td> +<td> + <p> + The character class name for space characters. + </p> + </td> +<td> + <p> + "space" + </p> + </td> +</tr> +<tr> +<td> + <p> + 309 + </p> + </td> +<td> + <p> + The character class name for upper case characters. + </p> + </td> +<td> + <p> + "upper" + </p> + </td> +</tr> +<tr> +<td> + <p> + 310 + </p> + </td> +<td> + <p> + The character class name for hexadecimal characters. + </p> + </td> +<td> + <p> + "xdigit" + </p> + </td> +</tr> +<tr> +<td> + <p> + 311 + </p> + </td> +<td> + <p> + The character class name for blank characters. + </p> + </td> +<td> + <p> + "blank" + </p> + </td> +</tr> +<tr> +<td> + <p> + 312 + </p> + </td> +<td> + <p> + The character class name for word characters. + </p> + </td> +<td> + <p> + "word" + </p> + </td> +</tr> +<tr> +<td> + <p> + 313 + </p> + </td> +<td> + <p> + The character class name for Unicode characters. + </p> + </td> +<td> + <p> + "unicode" + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Finally, custom collating element names are loaded starting from message + id 400, and terminating when the first load thereafter fails. Each message + looks something like: "tagname string" where tagname is the name + used inside [[.tagname.]] and string is the actual text of the collating + element. Note that the value of collating element [[.zero.]] is used for + the conversion of strings to numbers - if you replace this with another value + then that will be used for string parsing - for example use the Unicode character + 0x0660 for [[.zero.]] if you want to use Unicode Arabic-Indic digits in your + regular expressions in place of Latin digits. + </p> +<p> + Note that the POSIX defined names for character classes and collating elements + are always available - even if custom names are defined, in contrast, custom + error messages, and custom syntax messages replace the default ones. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="headers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="thread_safety.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/performance.html b/libs/regex/doc/html/boost_regex/background_information/performance.html new file mode 100644 index 0000000000..32e221f59e --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/performance.html @@ -0,0 +1,60 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Performance</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="faq.html" title="FAQ"> +<link rel="next" href="standards.html" title="Standards Conformance"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="faq.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="standards.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.performance"></a><a class="link" href="performance.html" title="Performance">Performance</a> +</h3></div></div></div> +<p> + The performance of Boost.Regex in both recursive and non-recursive modes + should be broadly comparable to other regular expression libraries: recursive + mode is slightly faster (especially where memory allocation requires thread + synchronisation), but not by much. The following pages compare Boost.Regex + with various other regular expression libraries for the following compilers: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <a href="../../../vc71-performance.html" target="_top">Visual Studio.Net 2003 (recursive + Boost.Regex implementation)</a>. + </li> +<li class="listitem"> + <a href="../../../gcc-performance.html" target="_top">Gcc 3.2 (cygwin) (non-recursive + Boost.Regex implementation)</a>. + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="faq.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="standards.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/redist.html b/libs/regex/doc/html/boost_regex/background_information/redist.html new file mode 100644 index 0000000000..7bdb421181 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/redist.html @@ -0,0 +1,61 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Redistributables</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="standards.html" title="Standards Conformance"> +<link rel="next" href="acknowledgements.html" title="Acknowledgements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="standards.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.redist"></a><a class="link" href="redist.html" title="Redistributables">Redistributables</a> +</h3></div></div></div> +<p> + If you are using Microsoft or Borland C++ and link to a dll version of the + run time library, then you can choose to also link to a dll version of Boost.Regex + by defining the symbol BOOST_REGEX_DYN_LINK when you compile your code. While + these dll's are redistributable, there are no "standard" versions, + so when installing on the users PC, you should place these in a directory + private to your application, and not in the PC's directory path. Note that + if you link to a static version of your run time library, then you will also + link to a static version of Boost.Regex and no dll's will need to be distributed. + The possible Boost.Regex dll and library names are computed according to + the formula given in <a href="../../../../../../more/getting_started.html" target="_top">the + getting started guide</a>. + </p> +<p> + Note: you can disable automatic library selection by defining the symbol + BOOST_REGEX_NO_LIB when compiling, this is useful if you want to build Boost.Regex + yourself in your IDE, or if you need to debug Boost.Regex. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="standards.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/standards.html b/libs/regex/doc/html/boost_regex/background_information/standards.html new file mode 100644 index 0000000000..511f399d8f --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/standards.html @@ -0,0 +1,574 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Standards Conformance</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="performance.html" title="Performance"> +<link rel="next" href="redist.html" title="Redistributables"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="redist.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.standards"></a><a class="link" href="standards.html" title="Standards Conformance">Standards + Conformance</a> +</h3></div></div></div> +<h5> +<a name="boost_regex.background_information.standards.h0"></a> + <span><a name="boost_regex.background_information.standards.c__"></a></span><a class="link" href="standards.html#boost_regex.background_information.standards.c__">C++</a> + </h5> +<p> + Boost.Regex is intended to conform to the <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">Technical + Report on C++ Library Extensions</a>. + </p> +<h5> +<a name="boost_regex.background_information.standards.h1"></a> + <span><a name="boost_regex.background_information.standards.ecmascript___javascript"></a></span><a class="link" href="standards.html#boost_regex.background_information.standards.ecmascript___javascript">ECMAScript + / JavaScript</a> + </h5> +<p> + All of the ECMAScript regular expression syntax features are supported, except + that: + </p> +<p> + The escape sequence \u matches any upper case character (the same as [[:upper:]]) + rather than a Unicode escape sequence; use \x{DDDD} for Unicode escape sequences. + </p> +<h5> +<a name="boost_regex.background_information.standards.h2"></a> + <span><a name="boost_regex.background_information.standards.perl"></a></span><a class="link" href="standards.html#boost_regex.background_information.standards.perl">Perl</a> + </h5> +<p> + Almost all Perl features are supported, except for: + </p> +<p> + (?{code}) Not implementable in a compiled strongly typed language. + </p> +<p> + (??{code}) Not implementable in a compiled strongly typed language. + </p> +<p> + (*VERB) The <a href="http://perldoc.perl.org/perlre.html#Special-Backtracking-Control-Verbs" target="_top">backtracking + control verbs</a> are not recognised or implemented at this time. + </p> +<p> + In addition the following features behave slightly differently from Perl: + </p> +<p> + ^ $ \Z These recognise any line termination sequence, and not just \n: see + the Unicode requirements below. + </p> +<h5> +<a name="boost_regex.background_information.standards.h3"></a> + <span><a name="boost_regex.background_information.standards.posix"></a></span><a class="link" href="standards.html#boost_regex.background_information.standards.posix">POSIX</a> + </h5> +<p> + All the POSIX basic and extended regular expression features are supported, + except that: + </p> +<p> + No character collating names are recognized except those specified in the + POSIX standard for the C locale, unless they are explicitly registered with + the traits class. + </p> +<p> + Character equivalence classes ( [[=a=]] etc) are probably buggy except on + Win32. Implementing this feature requires knowledge of the format of the + string sort keys produced by the system; if you need this, and the default + implementation doesn't work on your platform, then you will need to supply + a custom traits class. + </p> +<h5> +<a name="boost_regex.background_information.standards.h4"></a> + <span><a name="boost_regex.background_information.standards.unicode"></a></span><a class="link" href="standards.html#boost_regex.background_information.standards.unicode">Unicode</a> + </h5> +<p> + The following comments refer to <a href="http://unicode.org/reports/tr18/" target="_top">Unicode + Technical Standard #18: Unicode Regular Expressions version 11</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Item + </p> + </th> +<th> + <p> + Feature + </p> + </th> +<th> + <p> + Support + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + 1.1 + </p> + </td> +<td> + <p> + Hex Notation + </p> + </td> +<td> + <p> + Yes: use \x{DDDD} to refer to code point UDDDD. + </p> + </td> +</tr> +<tr> +<td> + <p> + 1.2 + </p> + </td> +<td> + <p> + Character Properties + </p> + </td> +<td> + <p> + All the names listed under the General Category Property are supported. + Script names and Other Names are not currently supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 1.3 + </p> + </td> +<td> + <p> + Subtraction and Intersection + </p> + </td> +<td> + <p> + Indirectly support by forward-lookahead: + </p> + <p> + <code class="computeroutput"><span class="special">(?=[[:</span><span class="identifier">X</span><span class="special">:]])[[:</span><span class="identifier">Y</span><span class="special">:]]</span></code> + </p> + <p> + Gives the intersection of character properties X and Y. + </p> + <p> + <code class="computeroutput"><span class="special">(?![[:</span><span class="identifier">X</span><span class="special">:]])[[:</span><span class="identifier">Y</span><span class="special">:]]</span></code> + </p> + <p> + Gives everything in Y that is not in X (subtraction). + </p> + </td> +</tr> +<tr> +<td> + <p> + 1.4 + </p> + </td> +<td> + <p> + Simple Word Boundaries + </p> + </td> +<td> + <p> + Conforming: non-spacing marks are included in the set of word characters. + </p> + </td> +</tr> +<tr> +<td> + <p> + 1.5 + </p> + </td> +<td> + <p> + Caseless Matching + </p> + </td> +<td> + <p> + Supported, note that at this level, case transformations are 1:1, + many to many case folding operations are not supported (for example + "ß" to "SS"). + </p> + </td> +</tr> +<tr> +<td> + <p> + 1.6 + </p> + </td> +<td> + <p> + Line Boundaries + </p> + </td> +<td> + <p> + Supported, except that "." matches only one character + of "\r\n". Other than that word boundaries match correctly; + including not matching in the middle of a "\r\n" sequence. + </p> + </td> +</tr> +<tr> +<td> + <p> + 1.7 + </p> + </td> +<td> + <p> + Code Points + </p> + </td> +<td> + <p> + Supported: provided you use the u32* algorithms, then UTF-8, UTF-16 + and UTF-32 are all treated as sequences of 32-bit code points. + </p> + </td> +</tr> +<tr> +<td> + <p> + 2.1 + </p> + </td> +<td> + <p> + Canonical Equivalence + </p> + </td> +<td> + <p> + Not supported: it is up to the user of the library to convert all + text into the same canonical form as the regular expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + 2.2 + </p> + </td> +<td> + <p> + Default Grapheme Clusters + </p> + </td> +<td> + <p> + Not supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 2.3Default Word Boundaries + </p> + </td> +<td> + <p> + Not supported. + </p> + </td> +<td class="auto-generated"> </td> +</tr> +<tr> +<td> + <p> + 2.4 + </p> + </td> +<td> + <p> + Default Loose Matches + </p> + </td> +<td> + <p> + Not Supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 2.5 + </p> + </td> +<td> + <p> + Named Properties + </p> + </td> +<td> + <p> + Supported: the expression "[[:name:]]" or \N{name} matches + the named character "name". + </p> + </td> +</tr> +<tr> +<td> + <p> + 2.6 + </p> + </td> +<td> + <p> + Wildcard properties + </p> + </td> +<td> + <p> + Not Supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.1 + </p> + </td> +<td> + <p> + Tailored Punctuation. + </p> + </td> +<td> + <p> + Not Supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.2 + </p> + </td> +<td> + <p> + Tailored Grapheme Clusters + </p> + </td> +<td> + <p> + Not Supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.3 + </p> + </td> +<td> + <p> + Tailored Word Boundaries. + </p> + </td> +<td> + <p> + Not Supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.4 + </p> + </td> +<td> + <p> + Tailored Loose Matches + </p> + </td> +<td> + <p> + Partial support: [[=c=]] matches characters with the same primary + equivalence class as "c". + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.5 + </p> + </td> +<td> + <p> + Tailored Ranges + </p> + </td> +<td> + <p> + Supported: [a-b] matches any character that collates in the range + a to b, when the expression is constructed with the collate flag + set. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.6 + </p> + </td> +<td> + <p> + Context Matches + </p> + </td> +<td> + <p> + Not Supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.7 + </p> + </td> +<td> + <p> + Incremental Matches + </p> + </td> +<td> + <p> + Supported: pass the flag <code class="computeroutput"><span class="identifier">match_partial</span></code> + to the regex algorithms. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.8 + </p> + </td> +<td> + <p> + Unicode Set Sharing + </p> + </td> +<td> + <p> + Not Supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.9 + </p> + </td> +<td> + <p> + Possible Match Sets + </p> + </td> +<td> + <p> + Not supported, however this information is used internally to optimise + the matching of regular expressions, and return quickly if no match + is possible. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.10 + </p> + </td> +<td> + <p> + Folded Matching + </p> + </td> +<td> + <p> + Partial Support: It is possible to achieve a similar effect by + using a custom regular expression traits class. + </p> + </td> +</tr> +<tr> +<td> + <p> + 3.11 + </p> + </td> +<td> + <p> + Custom Submatch Evaluation + </p> + </td> +<td> + <p> + Not Supported. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="redist.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/background_information/thread_safety.html b/libs/regex/doc/html/boost_regex/background_information/thread_safety.html new file mode 100644 index 0000000000..3c4629517b --- /dev/null +++ b/libs/regex/doc/html/boost_regex/background_information/thread_safety.html @@ -0,0 +1,85 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Thread Safety</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../background_information.html" title="Background Information"> +<link rel="prev" href="locale.html" title="Localization"> +<link rel="next" href="examples.html" title="Test and Example Programs"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="locale.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="examples.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.background_information.thread_safety"></a><a class="link" href="thread_safety.html" title="Thread Safety">Thread + Safety</a> +</h3></div></div></div> +<p> + The Boost.Regex library is thread safe when Boost is: you can verify that + Boost is in thread safe mode by checking to see if <code class="computeroutput"><span class="identifier">BOOST_HAS_THREADS</span></code> + is defined: this macro is set automatically by the config system when threading + support is turned on in your compiler. + </p> +<p> + Class <a class="link" href="../ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> + and its typedefs regex and wregex are thread safe, in that compiled regular + expressions can safely be shared between threads. The matching algorithms + <a class="link" href="../ref/regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a>, + <a class="link" href="../ref/regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a>, + and <a class="link" href="../ref/regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a> + are all re-entrant and thread safe. Class <a class="link" href="../ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> is now thread safe, + in that the results of a match can be safely copied from one thread to another + (for example one thread may find matches and push <a class="link" href="../ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> instances onto a queue, + while another thread pops them off the other end), otherwise use a separate + instance of <a class="link" href="../ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> + per thread. + </p> +<p> + The <a class="link" href="../ref/posix.html" title="POSIX Compatible C API's">POSIX API functions</a> are + all re-entrant and thread safe, regular expressions compiled with regcomp + can also be shared between threads. + </p> +<p> + The <a class="link" href="../ref/deprecated_interfaces/old_regex.html" title="High Level Class RegEx (Deprecated)">class + RegEx</a> is only thread safe if each thread gets its own RegEx instance + (apartment threading) - this is a consequence of RegEx handling both compiling + and matching regular expressions. + </p> +<p> + Finally note that changing the global locale invalidates all compiled regular + expressions, therefore calling <code class="computeroutput"><span class="identifier">set_locale</span></code> + from one thread while another uses regular expressions will produce unpredictable + results. + </p> +<p> + There is also a requirement that there is only one thread executing prior + to the start of main(). + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="locale.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../background_information.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="examples.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/captures.html b/libs/regex/doc/html/boost_regex/captures.html new file mode 100644 index 0000000000..1d38ff4860 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/captures.html @@ -0,0 +1,386 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Understanding Marked Sub-Expressions and Captures</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="unicode.html" title="Unicode and Boost.Regex"> +<link rel="next" href="partial_matches.html" title="Partial Matches"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="unicode.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="partial_matches.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.captures"></a><a class="link" href="captures.html" title="Understanding Marked Sub-Expressions and Captures">Understanding Marked Sub-Expressions + and Captures</a> +</h2></div></div></div> +<p> + Captures are the iterator ranges that are "captured" by marked sub-expressions + as a regular expression gets matched. Each marked sub-expression can result + in more than one capture, if it is matched more than once. This document explains + how captures and marked sub-expressions in Boost.Regex are represented and + accessed. + </p> +<h5> +<a name="boost_regex.captures.h0"></a> + <span><a name="boost_regex.captures.marked_sub_expressions"></a></span><a class="link" href="captures.html#boost_regex.captures.marked_sub_expressions">Marked + sub-expressions</a> + </h5> +<p> + Every time a Perl regular expression contains a parenthesis group <code class="computeroutput"><span class="special">()</span></code>, it spits out an extra field, known as a + marked sub-expression, for example the expression: + </p> +<pre class="programlisting">(\w+)\W+(\w+)</pre> +<p> + Has two marked sub-expressions (known as $1 and $2 respectively), in addition + the complete match is known as $&, everything before the first match as + $`, and everything after the match as $'. So if the above expression is searched + for within <code class="computeroutput"><span class="string">"@abc def--"</span></code>, + then we obtain: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Sub-expression + </p> + </th> +<th> + <p> + Text found + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + $` + </p> + </td> +<td> + <p> + "@" + </p> + </td> +</tr> +<tr> +<td> + <p> + $& + </p> + </td> +<td> + <p> + "abc def" + </p> + </td> +</tr> +<tr> +<td> + <p> + $1 + </p> + </td> +<td> + <p> + "abc" + </p> + </td> +</tr> +<tr> +<td> + <p> + $2 + </p> + </td> +<td> + <p> + "def" + </p> + </td> +</tr> +<tr> +<td> + <p> + $' + </p> + </td> +<td> + <p> + "--" + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + In Boost.Regex all these are accessible via the <a class="link" href="ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> class that gets filled + in when calling one of the regular expression matching algorithms ( <a class="link" href="ref/regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a>, <a class="link" href="ref/regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a>, or <a class="link" href="ref/regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>). So given: + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">IteratorType</span><span class="special">></span> <span class="identifier">m</span><span class="special">;</span> +</pre> +<p> + The Perl and Boost.Regex equivalents are as follows: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Perl + </p> + </th> +<th> + <p> + Boost.Regex + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + $` + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + $& + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + $n + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="identifier">n</span><span class="special">]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + $' + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">()</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + In Boost.Regex each sub-expression match is represented by a <a class="link" href="ref/sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> object, this is basically + just a pair of iterators denoting the start and end position of the sub-expression + match, but there are some additional operators provided so that objects of + type <a class="link" href="ref/sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + behave a lot like a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code>: for example they are implicitly + convertible to a <code class="computeroutput"><span class="identifier">basic_string</span></code>, + they can be compared to a string, added to a string, or streamed out to an + output stream. + </p> +<h5> +<a name="boost_regex.captures.h1"></a> + <span><a name="boost_regex.captures.unmatched_sub_expressions"></a></span><a class="link" href="captures.html#boost_regex.captures.unmatched_sub_expressions">Unmatched + Sub-Expressions</a> + </h5> +<p> + When a regular expression match is found there is no need for all of the marked + sub-expressions to have participated in the match, for example the expression: + </p> +<pre class="programlisting">(abc)|(def)</pre> +<p> + can match either $1 or $2, but never both at the same time. In Boost.Regex + you can determine which sub-expressions matched by accessing the <code class="computeroutput"><span class="identifier">sub_match</span><span class="special">::</span><span class="identifier">matched</span></code> data member. + </p> +<h5> +<a name="boost_regex.captures.h2"></a> + <span><a name="boost_regex.captures.repeated_captures"></a></span><a class="link" href="captures.html#boost_regex.captures.repeated_captures">Repeated + Captures</a> + </h5> +<p> + When a marked sub-expression is repeated, then the sub-expression gets "captured" + multiple times, however normally only the final capture is available, for example + if + </p> +<pre class="programlisting">(?:(\w+)\W+)+</pre> +<p> + is matched against + </p> +<pre class="programlisting">one fine day</pre> +<p> + Then $1 will contain the string "day", and all the previous captures + will have been forgotten. + </p> +<p> + However, Boost.Regex has an experimental feature that allows all the capture + information to be retained - this is accessed either via the <code class="computeroutput"><span class="identifier">match_results</span><span class="special">::</span><span class="identifier">captures</span></code> member function or the <code class="computeroutput"><span class="identifier">sub_match</span><span class="special">::</span><span class="identifier">captures</span></code> member function. These functions + return a container that contains a sequence of all the captures obtained during + the regular expression matching. The following example program shows how this + information may be used: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">void</span> <span class="identifier">print_captures</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">regx</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">text</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="identifier">regx</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">smatch</span> <span class="identifier">what</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Expression: \""</span> <span class="special"><<</span> <span class="identifier">regx</span> <span class="special"><<</span> <span class="string">"\"\n"</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Text: \""</span> <span class="special"><<</span> <span class="identifier">text</span> <span class="special"><<</span> <span class="string">"\"\n"</span><span class="special">;</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">text</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_extra</span><span class="special">))</span> + <span class="special">{</span> + <span class="keyword">unsigned</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"** Match found **\n Sub-Expressions:\n"</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" $"</span> <span class="special"><<</span> <span class="identifier">i</span> <span class="special"><<</span> <span class="string">" = \""</span> <span class="special"><<</span> <span class="identifier">what</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special"><<</span> <span class="string">"\"\n"</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" Captures:\n"</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" $"</span> <span class="special"><<</span> <span class="identifier">i</span> <span class="special"><<</span> <span class="string">" = {"</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="identifier">j</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">j</span> <span class="special"><</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">captures</span><span class="special">(</span><span class="identifier">i</span><span class="special">).</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">j</span><span class="special">)</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">", "</span><span class="special">;</span> + <span class="keyword">else</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" "</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"\""</span> <span class="special"><<</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">captures</span><span class="special">(</span><span class="identifier">i</span><span class="special">)[</span><span class="identifier">j</span><span class="special">]</span> <span class="special"><<</span> <span class="string">"\""</span><span class="special">;</span> + <span class="special">}</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">" }\n"</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">}</span> + <span class="keyword">else</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"** No Match found **\n"</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span> <span class="special">,</span> <span class="keyword">char</span><span class="special">*</span> <span class="special">[])</span> +<span class="special">{</span> + <span class="identifier">print_captures</span><span class="special">(</span><span class="string">"(([[:lower:]]+)|([[:upper:]]+))+"</span><span class="special">,</span> <span class="string">"aBBcccDDDDDeeeeeeee"</span><span class="special">);</span> + <span class="identifier">print_captures</span><span class="special">(</span><span class="string">"(.*)bar|(.*)bah"</span><span class="special">,</span> <span class="string">"abcbar"</span><span class="special">);</span> + <span class="identifier">print_captures</span><span class="special">(</span><span class="string">"(.*)bar|(.*)bah"</span><span class="special">,</span> <span class="string">"abcbah"</span><span class="special">);</span> + <span class="identifier">print_captures</span><span class="special">(</span><span class="string">"^(?:(\\w+)|(?>\\W+))*$"</span><span class="special">,</span> + <span class="string">"now is the time for all good men to come to the aid of the party"</span><span class="special">);</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + Which produces the following output: + </p> +<pre class="programlisting">Expression: "(([[:lower:]]+)|([[:upper:]]+))+" +Text: "aBBcccDDDDDeeeeeeee" +** Match found ** + Sub-Expressions: + $0 = "aBBcccDDDDDeeeeeeee" + $1 = "eeeeeeee" + $2 = "eeeeeeee" + $3 = "DDDDD" + Captures: + $0 = { "aBBcccDDDDDeeeeeeee" } + $1 = { "a", "BB", "ccc", "DDDDD", "eeeeeeee" } + $2 = { "a", "ccc", "eeeeeeee" } + $3 = { "BB", "DDDDD" } +Expression: "(.*)bar|(.*)bah" +Text: "abcbar" +** Match found ** + Sub-Expressions: + $0 = "abcbar" + $1 = "abc" + $2 = "" + Captures: + $0 = { "abcbar" } + $1 = { "abc" } + $2 = { } +Expression: "(.*)bar|(.*)bah" +Text: "abcbah" +** Match found ** + Sub-Expressions: + $0 = "abcbah" + $1 = "" + $2 = "abc" + Captures: + $0 = { "abcbah" } + $1 = { } + $2 = { "abc" } +Expression: "^(?:(\w+)|(?>\W+))*$" +Text: "now is the time for all good men to come to the aid of the party" +** Match found ** + Sub-Expressions: + $0 = "now is the time for all good men to come to the aid of the party" + $1 = "party" + Captures: + $0 = { "now is the time for all good men to come to the aid of the party" } + $1 = { "now", "is", "the", "time", "for", "all", "good", "men", "to", + "come", "to", "the", "aid", "of", "the", "party" } +</pre> +<p> + Unfortunately enabling this feature has an impact on performance (even if you + don't use it), and a much bigger impact if you do use it, therefore to use + this feature you need to: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Define BOOST_REGEX_MATCH_EXTRA for all translation units including the + library source (the best way to do this is to uncomment this define in + boost/regex/user.hpp and then rebuild everything. + </li> +<li class="listitem"> + Pass the match_extra flag to the particular algorithms where you actually + need the captures information (regex_search, regex_match, or regex_iterator). + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="unicode.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="partial_matches.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/configuration.html b/libs/regex/doc/html/boost_regex/configuration.html new file mode 100644 index 0000000000..276db85fd9 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/configuration.html @@ -0,0 +1,51 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Configuration</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="../index.html" title="Boost.Regex"> +<link rel="next" href="configuration/compiler.html" title="Compiler Setup"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="configuration/compiler.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.configuration"></a><a class="link" href="configuration.html" title="Configuration">Configuration</a> +</h2></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="configuration/compiler.html">Compiler Setup</a></span></dt> +<dt><span class="section"><a href="configuration/locale.html">Locale and traits class + selection</a></span></dt> +<dt><span class="section"><a href="configuration/linkage.html">Linkage Options</a></span></dt> +<dt><span class="section"><a href="configuration/algorithm.html">Algorithm Selection</a></span></dt> +<dt><span class="section"><a href="configuration/tuning.html">Algorithm Tuning</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="configuration/compiler.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/configuration/algorithm.html b/libs/regex/doc/html/boost_regex/configuration/algorithm.html new file mode 100644 index 0000000000..906679af49 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/configuration/algorithm.html @@ -0,0 +1,93 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Algorithm Selection</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../configuration.html" title="Configuration"> +<link rel="prev" href="linkage.html" title="Linkage Options"> +<link rel="next" href="tuning.html" title="Algorithm Tuning"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="linkage.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tuning.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.configuration.algorithm"></a><a class="link" href="algorithm.html" title="Algorithm Selection">Algorithm Selection</a> +</h3></div></div></div> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + macro + </p> + </th> +<th> + <p> + description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + BOOST_REGEX_RECURSIVE + </p> + </td> +<td> + <p> + Tells Boost.Regex to use a stack-recursive matching algorithm. + This is generally the fastest option (although there is very little + in it), but can cause stack overflow in extreme cases, on Win32 + this can be handled safely, but this is not the case on other platforms. + </p> + </td> +</tr> +<tr> +<td> + <p> + BOOST_REGEX_NON_RECURSIVE + </p> + </td> +<td> + <p> + Tells Boost.Regex to use a non-stack recursive matching algorithm, + this can be slightly slower than the alternative, but is always + safe no matter how pathological the regular expression. This is + the default on non-Win32 platforms. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="linkage.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tuning.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/configuration/compiler.html b/libs/regex/doc/html/boost_regex/configuration/compiler.html new file mode 100644 index 0000000000..8cc81e08d4 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/configuration/compiler.html @@ -0,0 +1,50 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Compiler Setup</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../configuration.html" title="Configuration"> +<link rel="prev" href="../configuration.html" title="Configuration"> +<link rel="next" href="locale.html" title="Locale and traits class selection"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../configuration.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="locale.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.configuration.compiler"></a><a class="link" href="compiler.html" title="Compiler Setup">Compiler Setup</a> +</h3></div></div></div> +<p> + You shouldn't need to do anything special to configure Boost.Regex for use + with your compiler - the <a href="../../../../../config/index.html" target="_top">Boost.Config + subsystem</a> should already take care of it, if you do have problems + (or you are using a particularly obscure compiler or platform) then <a href="../../../../../config/index.html" target="_top">Boost.Config</a> has a configure script + that you can run. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../configuration.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="locale.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/configuration/linkage.html b/libs/regex/doc/html/boost_regex/configuration/linkage.html new file mode 100644 index 0000000000..8bdb102d25 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/configuration/linkage.html @@ -0,0 +1,106 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Linkage Options</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../configuration.html" title="Configuration"> +<link rel="prev" href="locale.html" title="Locale and traits class selection"> +<link rel="next" href="algorithm.html" title="Algorithm Selection"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="locale.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="algorithm.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.configuration.linkage"></a><a class="link" href="linkage.html" title="Linkage Options">Linkage Options</a> +</h3></div></div></div> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + macro + </p> + </th> +<th> + <p> + description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + BOOST_REGEX_DYN_LINK + </p> + </td> +<td> + <p> + For Microsoft and Borland C++ builds, this tells Boost.Regex that + it should link to the dll build of the Boost.Regex. By default + boost.regex will link to its static library build, even if the + dynamic C runtime library is in use. + </p> + </td> +</tr> +<tr> +<td> + <p> + BOOST_REGEX_NO_LIB + </p> + </td> +<td> + <p> + For Microsoft and Borland C++ builds, this tells Boost.Regex that + it should not automatically select the library to link to. + </p> + </td> +</tr> +<tr> +<td> + <p> + BOOST_REGEX_NO_FASTCALL + </p> + </td> +<td> + <p> + For Microsoft builds, this tells Boost.Regex to use the <code class="computeroutput"><span class="identifier">__cdecl</span></code> calling convention rather + than <code class="computeroutput"><span class="identifier">__fastcall</span></code>. + Useful if you want to use the same library from both managed and + unmanaged code. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="locale.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="algorithm.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/configuration/locale.html b/libs/regex/doc/html/boost_regex/configuration/locale.html new file mode 100644 index 0000000000..4d872aba19 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/configuration/locale.html @@ -0,0 +1,109 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Locale and traits class selection</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../configuration.html" title="Configuration"> +<link rel="prev" href="compiler.html" title="Compiler Setup"> +<link rel="next" href="linkage.html" title="Linkage Options"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="compiler.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="linkage.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.configuration.locale"></a><a class="link" href="locale.html" title="Locale and traits class selection">Locale and traits class + selection</a> +</h3></div></div></div> +<p> + The following macros (see <a href="../../../../../../boost/regex/user.hpp" target="_top">user.hpp</a>) + control how Boost.Regex interacts with the user's locale: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + macro + </p> + </th> +<th> + <p> + description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + BOOST_REGEX_USE_C_LOCALE + </p> + </td> +<td> + <p> + Forces Boost.Regex to use the global C locale in its traits class + support: this is now deprecated in favour of the C++ locale. + </p> + </td> +</tr> +<tr> +<td> + <p> + BOOST_REGEX_USE_CPP_LOCALE + </p> + </td> +<td> + <p> + Forces Boost.Regex to use std::locale in it's default traits class, + regular expressions can then be imbued with an instance specific + locale. This is the default behaviour on non-Windows platforms. + </p> + </td> +</tr> +<tr> +<td> + <p> + BOOST_REGEX_NO_W32 + </p> + </td> +<td> + <p> + Tells Boost.Regex not to use any Win32 API's even when available + (implies BOOST_REGEX_USE_CPP_LOCALE unless BOOST_REGEX_USE_C_LOCALE + is set). + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="compiler.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="linkage.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/configuration/tuning.html b/libs/regex/doc/html/boost_regex/configuration/tuning.html new file mode 100644 index 0000000000..856732914e --- /dev/null +++ b/libs/regex/doc/html/boost_regex/configuration/tuning.html @@ -0,0 +1,156 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Algorithm Tuning</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../configuration.html" title="Configuration"> +<link rel="prev" href="algorithm.html" title="Algorithm Selection"> +<link rel="next" href="../install.html" title="Building and Installing the Library"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="algorithm.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../install.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.configuration.tuning"></a><a class="link" href="tuning.html" title="Algorithm Tuning">Algorithm Tuning</a> +</h3></div></div></div> +<p> + The following option applies only if BOOST_REGEX_RECURSIVE is set. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + macro + </p> + </th> +<th> + <p> + description + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + BOOST_REGEX_HAS_MS_STACK_GUARD + </p> + </td> +<td> + <p> + Tells Boost.Regex that Microsoft style __try - __except blocks + are supported, and can be used to safely trap stack overflow. + </p> + </td> +</tr></tbody> +</table></div> +<p> + The following options apply only if BOOST_REGEX_NON_RECURSIVE is set. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + macro + </p> + </th> +<th> + <p> + description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + BOOST_REGEX_BLOCKSIZE + </p> + </td> +<td> + <p> + In non-recursive mode, Boost.Regex uses largish blocks of memory + to act as a stack for the state machine, the larger the block size + then the fewer allocations that will take place. This defaults + to 4096 bytes, which is large enough to match the vast majority + of regular expressions without further allocations, however, you + can choose smaller or larger values depending upon your platforms + characteristics. + </p> + </td> +</tr> +<tr> +<td> + <p> + BOOST_REGEX_MAX_BLOCKS + </p> + </td> +<td> + <p> + Tells Boost.Regex how many blocks of size BOOST_REGEX_BLOCKSIZE + it is permitted to use. If this value is exceeded then Boost.Regex + will stop trying to find a match and throw a std::runtime_error. + Defaults to 1024, don't forget to tweek this value if you alter + BOOST_REGEX_BLOCKSIZE by much. + </p> + </td> +</tr> +<tr> +<td> + <p> + BOOST_REGEX_MAX_CACHE_BLOCKS + </p> + </td> +<td> + <p> + Tells Boost.Regex how many memory blocks to store in it's internal + cache - memory blocks are taken from this cache rather than by + calling ::operator new. Generally speeking this can be an order + of magnitude faster than calling ::opertator new each time a memory + block is required, but has the downside that Boost.Regex can end + up caching a large chunk of memory (by default up to 16 blocks + each of BOOST_REGEX_BLOCKSIZE size). If memory is tight then try + defining this to 0 (disables all caching), or if that is too slow, + then a value of 1 or 2, may be sufficient. On the other hand, on + large multi-processor, multi-threaded systems, you may find that + a higher value is in order. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="algorithm.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../install.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/format.html b/libs/regex/doc/html/boost_regex/format.html new file mode 100644 index 0000000000..56005bf030 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/format.html @@ -0,0 +1,62 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Search and Replace Format String Syntax</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="syntax/leftmost_longest_rule.html" title="The Leftmost Longest Rule"> +<link rel="next" href="format/sed_format.html" title="Sed Format String Syntax"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax/leftmost_longest_rule.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="format/sed_format.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.format"></a><a class="link" href="format.html" title="Search and Replace Format String Syntax">Search and Replace Format String Syntax</a> +</h2></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="format/sed_format.html">Sed Format String Syntax</a></span></dt> +<dt><span class="section"><a href="format/perl_format.html">Perl Format String Syntax</a></span></dt> +<dt><span class="section"><a href="format/boost_format_syntax.html">Boost-Extended + Format String Syntax</a></span></dt> +</dl></div> +<p> + Format strings are used by the algorithm <a class="link" href="ref/regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a> and by <a class="link" href="ref/match_results.html#boost_regex.match_results_format"><code class="computeroutput"><span class="identifier">match_results</span><span class="special"><>::</span><span class="identifier">format</span></code></a>, and are used to transform + one string into another. + </p> +<p> + There are three kind of format string: <a class="link" href="format/sed_format.html" title="Sed Format String Syntax">Sed</a>, + <a class="link" href="format/perl_format.html" title="Perl Format String Syntax">Perl</a> and <a class="link" href="format/boost_format_syntax.html" title="Boost-Extended Format String Syntax">Boost-Extended</a>. + </p> +<p> + Alternatively, when the flag <code class="computeroutput"><span class="identifier">format_literal</span></code> + is passed to one of these functions, then the format string is treated as a + string literal, and is copied unchanged to the output. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax/leftmost_longest_rule.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="format/sed_format.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html b/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html new file mode 100644 index 0000000000..8384f0c083 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html @@ -0,0 +1,561 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Boost-Extended Format String Syntax</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../format.html" title="Search and Replace Format String Syntax"> +<link rel="prev" href="perl_format.html" title="Perl Format String Syntax"> +<link rel="next" href="../ref.html" title="Reference"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="perl_format.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../format.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.format.boost_format_syntax"></a><a class="link" href="boost_format_syntax.html" title="Boost-Extended Format String Syntax">Boost-Extended + Format String Syntax</a> +</h3></div></div></div> +<p> + Boost-Extended format strings treat all characters as literals except for + '$', '\', '(', ')', '?', and ':'. + </p> +<h5> +<a name="boost_regex.format.boost_format_syntax.h0"></a> + <span><a name="boost_regex.format.boost_format_syntax.grouping"></a></span><a class="link" href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.grouping">Grouping</a> + </h5> +<p> + The characters '(' and ')' perform lexical grouping, so use \( and \) if + you want a to output literal parenthesis. + </p> +<h5> +<a name="boost_regex.format.boost_format_syntax.h1"></a> + <span><a name="boost_regex.format.boost_format_syntax.conditionals"></a></span><a class="link" href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.conditionals">Conditionals</a> + </h5> +<p> + The character '?' begins a conditional expression, the general form is: + </p> +<p> + ?Ntrue-expression:false-expression + </p> +<p> + where N is decimal digit. + </p> +<p> + If sub-expression N was matched, then true-expression is evaluated and sent + to output, otherwise false-expression is evaluated and sent to output. + </p> +<p> + You will normally need to surround a conditional-expression with parenthesis + in order to prevent ambiguities. + </p> +<p> + For example, the format string "(?1foo:bar)" will replace each + match found with "foo" if the sub-expression $1 was matched, and + with "bar" otherwise. + </p> +<p> + For sub-expressions with an index greater than 9, or for access to named + sub-expressions use: + </p> +<p> + ?{INDEX}true-expression:false-expression + </p> +<p> + or + </p> +<p> + ?{NAME}true-expression:false-expression + </p> +<h5> +<a name="boost_regex.format.boost_format_syntax.h2"></a> + <span><a name="boost_regex.format.boost_format_syntax.placeholder_sequences"></a></span><a class="link" href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.placeholder_sequences">Placeholder + Sequences</a> + </h5> +<p> + Placeholder sequences specify that some part of what matched the regular + expression should be sent to output as follows: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Placeholder + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + $& + </p> + </td> +<td> + <p> + Outputs what matched the whole expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + $MATCH + </p> + </td> +<td> + <p> + As $& + </p> + </td> +</tr> +<tr> +<td> + <p> + ${^MATCH} + </p> + </td> +<td> + <p> + As $& + </p> + </td> +</tr> +<tr> +<td> + <p> + $` + </p> + </td> +<td> + <p> + Outputs the text between the end of the last match found (or the + start of the text if no previous match was found), and the start + of the current match. + </p> + </td> +</tr> +<tr> +<td> + <p> + $PREMATCH + </p> + </td> +<td> + <p> + As $` + </p> + </td> +</tr> +<tr> +<td> + <p> + ${^PREMATCH} + </p> + </td> +<td> + <p> + As $` + </p> + </td> +</tr> +<tr> +<td> + <p> + $' + </p> + </td> +<td> + <p> + Outputs all the text following the end of the current match. + </p> + </td> +</tr> +<tr> +<td> + <p> + $POSTMATCH + </p> + </td> +<td> + <p> + As $' + </p> + </td> +</tr> +<tr> +<td> + <p> + ${^POSTMATCH} + </p> + </td> +<td> + <p> + As $' + </p> + </td> +</tr> +<tr> +<td> + <p> + $+ + </p> + </td> +<td> + <p> + Outputs what matched the last marked sub-expression in the regular + expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + $LAST_PAREN_MATCH + </p> + </td> +<td> + <p> + As $+ + </p> + </td> +</tr> +<tr> +<td> + <p> + $LAST_SUBMATCH_RESULT + </p> + </td> +<td> + <p> + Outputs what matched the last sub-expression to be actually matched. + </p> + </td> +</tr> +<tr> +<td> + <p> + $^N + </p> + </td> +<td> + <p> + As $LAST_SUBMATCH_RESULT + </p> + </td> +</tr> +<tr> +<td> + <p> + $$ + </p> + </td> +<td> + <p> + Outputs a literal '$' + </p> + </td> +</tr> +<tr> +<td> + <p> + $n + </p> + </td> +<td> + <p> + Outputs what matched the n'th sub-expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + ${n} + </p> + </td> +<td> + <p> + Outputs what matched the n'th sub-expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + $+{NAME} + </p> + </td> +<td> + <p> + Outputs whatever matched the sub-expression named "NAME". + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Any $-placeholder sequence not listed above, results in '$' being treated + as a literal. + </p> +<h5> +<a name="boost_regex.format.boost_format_syntax.h3"></a> + <span><a name="boost_regex.format.boost_format_syntax.escape_sequences"></a></span><a class="link" href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.escape_sequences">Escape + Sequences</a> + </h5> +<p> + An escape character followed by any character x, outputs that character unless + x is one of the escape sequences shown below. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + \a + </p> + </td> +<td> + <p> + Outputs the bell character: '\a'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \e + </p> + </td> +<td> + <p> + Outputs the ANSI escape character (code point 27). + </p> + </td> +</tr> +<tr> +<td> + <p> + \f + </p> + </td> +<td> + <p> + Outputs a form feed character: '\f' + </p> + </td> +</tr> +<tr> +<td> + <p> + \n + </p> + </td> +<td> + <p> + Outputs a newline character: '\n'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \r + </p> + </td> +<td> + <p> + Outputs a carriage return character: '\r'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \t + </p> + </td> +<td> + <p> + Outputs a tab character: '\t'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \v + </p> + </td> +<td> + <p> + Outputs a vertical tab character: '\v'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \xDD + </p> + </td> +<td> + <p> + Outputs the character whose hexadecimal code point is 0xDD + </p> + </td> +</tr> +<tr> +<td> + <p> + \x{DDDD} + </p> + </td> +<td> + <p> + Outputs the character whose hexadecimal code point is 0xDDDDD + </p> + </td> +</tr> +<tr> +<td> + <p> + \cX + </p> + </td> +<td> + <p> + Outputs the ANSI escape sequence "escape-X". + </p> + </td> +</tr> +<tr> +<td> + <p> + \D + </p> + </td> +<td> + <p> + If D is a decimal digit in the range 1-9, then outputs the text + that matched sub-expression D. + </p> + </td> +</tr> +<tr> +<td> + <p> + \l + </p> + </td> +<td> + <p> + Causes the next character to be outputted, to be output in lower + case. + </p> + </td> +</tr> +<tr> +<td> + <p> + \u + </p> + </td> +<td> + <p> + Causes the next character to be outputted, to be output in upper + case. + </p> + </td> +</tr> +<tr> +<td> + <p> + \L + </p> + </td> +<td> + <p> + Causes all subsequent characters to be output in lower case, until + a \E is found. + </p> + </td> +</tr> +<tr> +<td> + <p> + \U + </p> + </td> +<td> + <p> + Causes all subsequent characters to be output in upper case, until + a \E is found. + </p> + </td> +</tr> +<tr> +<td> + <p> + \E + </p> + </td> +<td> + <p> + Terminates a \L or \U sequence. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="perl_format.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../format.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/format/perl_format.html b/libs/regex/doc/html/boost_regex/format/perl_format.html new file mode 100644 index 0000000000..233e0c2b54 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/format/perl_format.html @@ -0,0 +1,503 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Perl Format String Syntax</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../format.html" title="Search and Replace Format String Syntax"> +<link rel="prev" href="sed_format.html" title="Sed Format String Syntax"> +<link rel="next" href="boost_format_syntax.html" title="Boost-Extended Format String Syntax"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="sed_format.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../format.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="boost_format_syntax.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.format.perl_format"></a><a class="link" href="perl_format.html" title="Perl Format String Syntax">Perl Format String Syntax</a> +</h3></div></div></div> +<p> + Perl-style format strings treat all characters as literals except '$' and + '\' which start placeholder and escape sequences respectively. + </p> +<p> + Placeholder sequences specify that some part of what matched the regular + expression should be sent to output as follows: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Placeholder + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + $& + </p> + </td> +<td> + <p> + Outputs what matched the whole expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + $MATCH + </p> + </td> +<td> + <p> + As $& + </p> + </td> +</tr> +<tr> +<td> + <p> + ${^MATCH} + </p> + </td> +<td> + <p> + As $& + </p> + </td> +</tr> +<tr> +<td> + <p> + $` + </p> + </td> +<td> + <p> + Outputs the text between the end of the last match found (or the + start of the text if no previous match was found), and the start + of the current match. + </p> + </td> +</tr> +<tr> +<td> + <p> + $PREMATCH + </p> + </td> +<td> + <p> + As $` + </p> + </td> +</tr> +<tr> +<td> + <p> + ${^PREMATCH} + </p> + </td> +<td> + <p> + As $` + </p> + </td> +</tr> +<tr> +<td> + <p> + $' + </p> + </td> +<td> + <p> + Outputs all the text following the end of the current match. + </p> + </td> +</tr> +<tr> +<td> + <p> + $POSTMATCH + </p> + </td> +<td> + <p> + As $' + </p> + </td> +</tr> +<tr> +<td> + <p> + ${^POSTMATCH} + </p> + </td> +<td> + <p> + As $' + </p> + </td> +</tr> +<tr> +<td> + <p> + $+ + </p> + </td> +<td> + <p> + Outputs what matched the last marked sub-expression in the regular + expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + $LAST_PAREN_MATCH + </p> + </td> +<td> + <p> + As $+ + </p> + </td> +</tr> +<tr> +<td> + <p> + $LAST_SUBMATCH_RESULT + </p> + </td> +<td> + <p> + Outputs what matched the last sub-expression to be actually matched. + </p> + </td> +</tr> +<tr> +<td> + <p> + $^N + </p> + </td> +<td> + <p> + As $LAST_SUBMATCH_RESULT + </p> + </td> +</tr> +<tr> +<td> + <p> + $$ + </p> + </td> +<td> + <p> + Outputs a literal '$' + </p> + </td> +</tr> +<tr> +<td> + <p> + $n + </p> + </td> +<td> + <p> + Outputs what matched the n'th sub-expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + ${n} + </p> + </td> +<td> + <p> + Outputs what matched the n'th sub-expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + $+{NAME} + </p> + </td> +<td> + <p> + Outputs whatever matched the sub-expression named "NAME". + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Any $-placeholder sequence not listed above, results in '$' being treated + as a literal. + </p> +<p> + An escape character followed by any character x, outputs that character unless + x is one of the escape sequences shown below. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + \a + </p> + </td> +<td> + <p> + Outputs the bell character: '\a'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \e + </p> + </td> +<td> + <p> + Outputs the ANSI escape character (code point 27). + </p> + </td> +</tr> +<tr> +<td> + <p> + \f + </p> + </td> +<td> + <p> + Outputs a form feed character: '\f' + </p> + </td> +</tr> +<tr> +<td> + <p> + \n + </p> + </td> +<td> + <p> + Outputs a newline character: '\n'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \r + </p> + </td> +<td> + <p> + Outputs a carriage return character: '\r'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \t + </p> + </td> +<td> + <p> + Outputs a tab character: '\t'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \v + </p> + </td> +<td> + <p> + Outputs a vertical tab character: '\v'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \xDD + </p> + </td> +<td> + <p> + Outputs the character whose hexadecimal code point is 0xDD + </p> + </td> +</tr> +<tr> +<td> + <p> + \x{DDDD} + </p> + </td> +<td> + <p> + Outputs the character whose hexadecimal code point is 0xDDDDD + </p> + </td> +</tr> +<tr> +<td> + <p> + \cX + </p> + </td> +<td> + <p> + Outputs the ANSI escape sequence "escape-X". + </p> + </td> +</tr> +<tr> +<td> + <p> + \D + </p> + </td> +<td> + <p> + If D is a decimal digit in the range 1-9, then outputs the text + that matched sub-expression D. + </p> + </td> +</tr> +<tr> +<td> + <p> + \l + </p> + </td> +<td> + <p> + Causes the next character to be outputted, to be output in lower + case. + </p> + </td> +</tr> +<tr> +<td> + <p> + \u + </p> + </td> +<td> + <p> + Causes the next character to be outputted, to be output in upper + case. + </p> + </td> +</tr> +<tr> +<td> + <p> + \L + </p> + </td> +<td> + <p> + Causes all subsequent characters to be output in lower case, until + a \E is found. + </p> + </td> +</tr> +<tr> +<td> + <p> + \U + </p> + </td> +<td> + <p> + Causes all subsequent characters to be output in upper case, until + a \E is found. + </p> + </td> +</tr> +<tr> +<td> + <p> + \E + </p> + </td> +<td> + <p> + Terminates a \L or \U sequence. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="sed_format.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../format.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="boost_format_syntax.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/format/sed_format.html b/libs/regex/doc/html/boost_regex/format/sed_format.html new file mode 100644 index 0000000000..7a37b2b0b5 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/format/sed_format.html @@ -0,0 +1,249 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Sed Format String Syntax</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../format.html" title="Search and Replace Format String Syntax"> +<link rel="prev" href="../format.html" title="Search and Replace Format String Syntax"> +<link rel="next" href="perl_format.html" title="Perl Format String Syntax"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../format.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../format.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="perl_format.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.format.sed_format"></a><a class="link" href="sed_format.html" title="Sed Format String Syntax">Sed Format String Syntax</a> +</h3></div></div></div> +<p> + Sed-style format strings treat all characters as literals except: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + character + </p> + </th> +<th> + <p> + description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + & + </p> + </td> +<td> + <p> + The ampersand character is replaced in the output stream by the + the whole of what matched the regular expression. Use \& to + output a literal '&' character. + </p> + </td> +</tr> +<tr> +<td> + <p> + \ + </p> + </td> +<td> + <p> + Specifies an escape sequence. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + An escape character followed by any character x, outputs that character unless + x is one of the escape sequences shown below. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + \a + </p> + </td> +<td> + <p> + Outputs the bell character: '\a'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \e + </p> + </td> +<td> + <p> + Outputs the ANSI escape character (code point 27). + </p> + </td> +</tr> +<tr> +<td> + <p> + \f + </p> + </td> +<td> + <p> + Outputs a form feed character: '\f' + </p> + </td> +</tr> +<tr> +<td> + <p> + \n + </p> + </td> +<td> + <p> + Outputs a newline character: '\n'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \r + </p> + </td> +<td> + <p> + Outputs a carriage return character: '\r'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \t + </p> + </td> +<td> + <p> + Outputs a tab character: '\t'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \v + </p> + </td> +<td> + <p> + Outputs a vertical tab character: '\v'. + </p> + </td> +</tr> +<tr> +<td> + <p> + \xDD + </p> + </td> +<td> + <p> + Outputs the character whose hexadecimal code point is 0xDD + </p> + </td> +</tr> +<tr> +<td> + <p> + \x{DDDD} + </p> + </td> +<td> + <p> + Outputs the character whose hexadecimal code point is 0xDDDDD + </p> + </td> +</tr> +<tr> +<td> + <p> + \cX + </p> + </td> +<td> + <p> + Outputs the ANSI escape sequence "escape-X". + </p> + </td> +</tr> +<tr> +<td> + <p> + \D + </p> + </td> +<td> + <p> + If D is a decimal digit in the range 1-9, then outputs the text + that matched sub-expression D. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../format.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../format.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="perl_format.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/install.html b/libs/regex/doc/html/boost_regex/install.html new file mode 100644 index 0000000000..cf952713fe --- /dev/null +++ b/libs/regex/doc/html/boost_regex/install.html @@ -0,0 +1,438 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Building and Installing the Library</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="configuration/tuning.html" title="Algorithm Tuning"> +<link rel="next" href="introduction_and_overview.html" title="Introduction and Overview"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="configuration/tuning.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="introduction_and_overview.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.install"></a><a class="link" href="install.html" title="Building and Installing the Library">Building and Installing the Library</a> +</h2></div></div></div> +<p> + When you extract the library from its zip file, you must preserve its internal + directory structure (for example by using the -d option when extracting). If + you didn't do that when extracting, then you'd better stop reading this, delete + the files you just extracted, and try again! + </p> +<p> + This library should not need configuring before use; most popular compilers/standard + libraries/platforms are already supported "as is". If you do experience + configuration problems, or just want to test the configuration with your compiler, + then the process is the same as for all of boost; see the <a href="../../../../config/index.html" target="_top">configuration + library documentation</a>. + </p> +<p> + The library will encase all code inside namespace boost. + </p> +<p> + Unlike some other template libraries, this library consists of a mixture of + template code (in the headers) and static code and data (in cpp files). Consequently + it is necessary to build the library's support code into a library or archive + file before you can use it, instructions for specific platforms are as follows: + </p> +<h5> +<a name="boost_regex.install.h0"></a> + <span><a name="boost_regex.install.building_with_bjam"></a></span><a class="link" href="install.html#boost_regex.install.building_with_bjam">Building + with bjam</a> + </h5> +<p> + This is now the preferred method for building and installing this library, + please refer to the <a href="../../../../../more/getting_started.html" target="_top">getting + started guide</a> for more information. + </p> +<h5> +<a name="boost_regex.install.h1"></a> + <span><a name="boost_regex.install.building_with_unicode_and_icu_support"></a></span><a class="link" href="install.html#boost_regex.install.building_with_unicode_and_icu_support">Building + With Unicode and ICU Support</a> + </h5> +<p> + Boost.Regex is now capable of performing a configuration check to test whether + ICU is already installed in your compiler's search paths. When you build you + should see a message like this: + </p> +<pre class="programlisting"><span class="identifier">Performing</span> <span class="identifier">configuration</span> <span class="identifier">checks</span> + + <span class="special">-</span> <span class="identifier">has_icu</span> <span class="identifier">builds</span> <span class="special">:</span> <span class="identifier">yes</span> +</pre> +<p> + Whick means that ICU has been found, and support for it will be enabled in + the library build. + </p> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../doc/src/images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"><p> + If you don't want the regex library to use ICU then build with the "--disable-icu" + command line option. + </p></td></tr> +</table></div> +<p> + If instead you see: + </p> +<pre class="programlisting"><span class="identifier">Performing</span> <span class="identifier">configuration</span> <span class="identifier">checks</span> + + <span class="special">-</span> <span class="identifier">has_icu</span> <span class="identifier">builds</span> <span class="special">:</span> <span class="identifier">no</span> +</pre> +<p> + Then ICU was not found and support for it will not be compiled into the library. + If you think that it should have been found, then you will need to take a look + at the contents of the file <span class="emphasis"><em>boost-root/bin.v2/config.log</em></span> + for the actual error messages obtained when the build carried out the configuration + check. You will then need to fix these errors by ensuring your compiler gets + invoked with the correct options, for example: + </p> +<pre class="programlisting">bjam include=some-include-path --toolset=toolset-name install</pre> +<p> + will add "some-include-path" to your compilers header include path, + or if ICU has been built with non-standard names for it's binaries, then: + </p> +<pre class="programlisting">bjam -sICU_LINK="linker-options-for-icu" --toolset=toolset-name install</pre> +<p> + Will use <span class="emphasis"><em>"linker-options-for-icu"</em></span> when linking + the library rather than the default ICU binary names. + </p> +<p> + You might also need to use the options "cxxflags=-option" and "linkflags=-option" + to set compiler and linker specific options. + </p> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + Configuration results are cached - if you try rebuilding with different compiler + options then add an "-a" to the bjam command line to force all + targets to be rebuilt. + </p></td></tr> +</table></div> +<p> + If ICU is not already in your compiler's path, but instead headers, libraries + and binaries are located at <span class="emphasis"><em>path-to-icu/include</em></span>, <span class="emphasis"><em>path-to-icu/lib</em></span> + and <span class="emphasis"><em>path-to-icu/bin</em></span> respectively then you need to set + the environment variable <code class="computeroutput"><span class="identifier">ICU_PATH</span></code> + to point to the root directory of your ICU installation: this typically happens + if you're building with MSVC. For example if ICU was installed to <code class="computeroutput"><span class="identifier">c</span><span class="special">:\</span><span class="identifier">download</span><span class="special">\</span><span class="identifier">icu</span></code> you + might use: + </p> +<pre class="programlisting">bjam -sICU_PATH=c:\download\icu --toolset=toolset-name install</pre> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + ICU is a C++ library just like Boost is, as such your copy of ICU must have + been built with the same C++ compiler (and compiler version) that you are + using to build Boost. Boost.Regex will not work correctly unless you ensure + that this is the case: it is up to you to ensure that the version of ICU + you are using is binary compatible with the toolset you use to build Boost. + </p></td></tr> +</table></div> +<p> + And finally, if you want to build/test with multiple compiler versions, all + with different ICU builds, then the only way to achieve that currently is to + modify your user-config.jam so that each toolset has the necessary compiler/linker + options set so that ICU is found automatically by the configuration step (providing + the ICU binaries use the standard names, all you have to add is the appropriate + header-include and linker-search paths). + </p> +<h5> +<a name="boost_regex.install.h2"></a> + <span><a name="boost_regex.install.building_via_makefiles"></a></span><a class="link" href="install.html#boost_regex.install.building_via_makefiles">Building + via makefiles</a> + </h5> +<h6> +<a name="boost_regex.install.h3"></a> + <span><a name="boost_regex.install.borland_c___builder_"></a></span><a class="link" href="install.html#boost_regex.install.borland_c___builder_">Borland + C++ Builder:</a> + </h6> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Open up a console window and change to the <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">>\</span><span class="identifier">libs</span><span class="special">\</span><span class="identifier">regex</span><span class="special">\</span><span class="identifier">build</span></code> directory. + </li> +<li class="listitem"> + Select the appropriate makefile (bcb4.mak for C++ Builder 4, bcb5.mak for + C++ Builder 5, and bcb6.mak for C++ Builder 6). + </li> +<li class="listitem"> + Invoke the makefile (pass the full path to your version of make if you + have more than one version installed, the makefile relies on the path to + make to obtain your C++ Builder installation directory and tools) for example: + </li> +</ul></div> +<pre class="programlisting">make -fbcb5.mak</pre> +<p> + The build process will build a variety of .lib and .dll files (the exact number + depends upon the version of Borland's tools you are using) the .lib and dll + files will be in a sub-directory called bcb4 or bcb5 depending upon the makefile + used. To install the libraries into your development system use: + </p> +<pre class="programlisting">make -fbcb5.mak install</pre> +<p> + library files will be copied to <code class="computeroutput"><span class="special"><</span><span class="identifier">BCROOT</span><span class="special">>/</span><span class="identifier">lib</span></code> and the dll's to <code class="computeroutput"><span class="special"><</span><span class="identifier">BCROOT</span><span class="special">>/</span><span class="identifier">bin</span></code>, where <code class="computeroutput"><span class="special"><</span><span class="identifier">BCROOT</span><span class="special">></span></code> + corresponds to the install path of your Borland C++ tools. + </p> +<p> + You may also remove temporary files created during the build process (excluding + lib and dll files) by using: + </p> +<pre class="programlisting">make -fbcb5.mak clean</pre> +<p> + Finally when you use Boost.Regex it is only necessary for you to add the <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">></span></code> root director to your list of include directories + for that project. It is not necessary for you to manually add a .lib file to + the project; the headers will automatically select the correct .lib file for + your build mode and tell the linker to include it. There is one caveat however: + the library can not tell the difference between VCL and non-VCL enabled builds + when building a GUI application from the command line, if you build from the + command line with the 5.5 command line tools then you must define the pre-processor + symbol _NO_VCL in order to ensure that the correct link libraries are selected: + the C++ Builder IDE normally sets this automatically. Hint, users of the 5.5 + command line tools may want to add a -D_NO_VCL to bcc32.cfg in order to set + this option permanently. + </p> +<p> + If you would prefer to do a dynamic link to the regex libraries when using + the dll runtime then define BOOST_REGEX_DYN_LINK (you must do this if you want + to use Boost.Regex in multiple dll's), otherwise Boost.Regex will be statically + linked by default. + </p> +<p> + If you want to suppress automatic linking altogether (and supply your own custom + build of the lib) then define BOOST_REGEX_NO_LIB. + </p> +<p> + If you are building with C++ Builder 6, you will find that <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + can not be used in a pre-compiled header (the actual problem is in <code class="computeroutput"><span class="special"><</span><span class="identifier">locale</span><span class="special">></span></code> which gets included by <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>), + if this causes problems for you, then try defining BOOST_NO_STD_LOCALE when + building, this will disable some features throughout boost, but may save you + a lot in compile times! + </p> +<h5> +<a name="boost_regex.install.h4"></a> + <span><a name="boost_regex.install.microsoft_visual_c___6__7__7_1_and_8"></a></span><a class="link" href="install.html#boost_regex.install.microsoft_visual_c___6__7__7_1_and_8">Microsoft + Visual C++ 6, 7, 7.1 and 8</a> + </h5> +<p> + You need version 6 or later of MSVC to build this library. If you are using + VC5 then you may want to look at one of the previous releases of this library. + </p> +<p> + Open up a command prompt, which has the necessary MSVC environment variables + defined (for example by using the batch file Vcvars32.bat installed by the + Visual Studio installation), and change to the <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">>\</span><span class="identifier">libs</span><span class="special">\</span><span class="identifier">regex</span><span class="special">\</span><span class="identifier">build</span> <span class="identifier">directory</span></code>. + </p> +<p> + Select the correct makefile - vc6.mak for "vanilla" Visual C++ 6 + or vc6-stlport.mak if you are using STLPort. + </p> +<p> + Invoke the makefile like this: + </p> +<pre class="programlisting">nmake -fvc6.mak</pre> +<p> + You will now have a collection of lib and dll files in a "vc6" subdirectory, + to install these into your development system use: + </p> +<pre class="programlisting">nmake -fvc6.mak install</pre> +<p> + The lib files will be copied to your <code class="computeroutput"><span class="special"><</span><span class="identifier">VC6</span><span class="special">>\</span><span class="identifier">lib</span></code> directory and the dll files to <code class="computeroutput"><span class="special"><</span><span class="identifier">VC6</span><span class="special">>\</span><span class="identifier">bin</span></code>, where <code class="computeroutput"><span class="special"><</span><span class="identifier">VC6</span><span class="special">></span></code> is + the root of your Visual C++ 6 installation. + </p> +<p> + You can delete all the temporary files created during the build (excluding + lib and dll files) using: + </p> +<pre class="programlisting">nmake -fvc6.mak clean </pre> +<p> + If you want to build with ICU support, then you need to pass the path to your + ICU directory to the makefile, for example with: + </p> +<pre class="programlisting">nmake ICU_PATH=c:\open-source\icu -fvc71.mak install</pre> +<p> + Finally when you use Boost.Regex it is only necessary for you to add the <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">></span></code> root directory to your list of include + directories for that project. It is not necessary for you to manually add a + .lib file to the project; the headers will automatically select the correct + .lib file for your build mode and tell the linker to include it. + </p> +<p> + Note that if you want to dynamically link to the regex library when using the + dynamic C++ runtime, define BOOST_REGEX_DYN_LINK when building your project. + </p> +<p> + If you want to add the source directly to your project then define BOOST_REGEX_NO_LIB + to disable automatic library selection. + </p> +<p> + There are several important caveats to remember when using Boost.Regex with + Microsoft's Compiler: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + There have been some reports of compiler-optimization bugs affecting this + library, (particularly with VC6 versions prior to service patch 5) the + workaround is to build the library using /Oityb1 rather than /O2. That + is to use all optimization settings except /Oa. This problem is reported + to affect some standard library code as well ( in fact I'm not sure if + the problem is with the regex code or the underlying standard library), + so it's probably worthwhile applying this workaround in normal practice + in any case. + </li> +<li class="listitem"> + If you have replaced the C++ standard library that comes with VC6, then + when you build the library you must ensure that the environment variables + "INCLUDE" and "LIB" have been updated to reflect the + include and library paths for the new library - see vcvars32.bat (part + of your Visual Studio installation) for more details. + </li> +<li class="listitem"> + If you are building with the full STLPort v4.x, then use the vc6-stlport.mak + file provided and set the environment variable STLPORT_PATH to point to + the location of your STLPort installation (Note that the full STLPort libraries + appear not to support single-thread static builds). + </li> +<li class="listitem"> + If you are building your application with /Zc:wchar_t then you will need + to modify the makefile to add /Zc:wchar_t before building the library. + </li> +</ul></div> +<h6> +<a name="boost_regex.install.h5"></a> + <span><a name="boost_regex.install.gcc_2_95_and_later_"></a></span><a class="link" href="install.html#boost_regex.install.gcc_2_95_and_later_">GCC(2.95 + and later)</a> + </h6> +<p> + You can build with gcc using the normal boost Jamfile in <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">>/</span><span class="identifier">libs</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">build</span></code>, alternatively + there is a conservative makefile for the g++ compiler. From the command prompt + change to the <boost>/libs/regex/build directory and type: + </p> +<pre class="programlisting">make -fgcc.mak </pre> +<p> + At the end of the build process you should have a gcc sub-directory containing + release and debug versions of the library (libboost_regex.a and libboost_regex_debug.a). + When you build projects that use regex++, you will need to add the boost install + directory to your list of include paths and add <boost>/libs/regex/build/gcc/libboost_regex.a + to your list of library files. + </p> +<p> + There is also a makefile to build the library as a shared library: + </p> +<pre class="programlisting">make -fgcc-shared.mak</pre> +<p> + which will build libboost_regex.so and libboost_regex_debug.so. + </p> +<p> + Both of the these makefiles support the following environment variables: + </p> +<p> + ICU_PATH: tells the makefile to build with Unicode support, set to the path + where your ICU installation is located, for example with: make ICU_PATH=/usr/local + install -fgcc.mak + </p> +<p> + CXXFLAGS: extra compiler options - note that this applies to both the debug + and release builds. + </p> +<p> + INCLUDES: additional include directories. + </p> +<p> + LDFLAGS: additional linker options. + </p> +<p> + LIBS: additional library files. + </p> +<p> + For the more adventurous there is a configure script in <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">>/</span><span class="identifier">libs</span><span class="special">/</span><span class="identifier">config</span></code>; + see the <a href="../../../../config/index.html" target="_top">config library documentation</a>. + </p> +<h6> +<a name="boost_regex.install.h6"></a> + <span><a name="boost_regex.install.sun_workshop_6_1"></a></span><a class="link" href="install.html#boost_regex.install.sun_workshop_6_1">Sun + Workshop 6.1</a> + </h6> +<p> + There is a makefile for the sun (6.1) compiler (C++ version 3.12). From the + command prompt change to the <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">>/</span><span class="identifier">libs</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">build</span></code> directory + and type: + </p> +<pre class="programlisting">dmake -f sunpro.mak </pre> +<p> + At the end of the build process you should have a sunpro sub-directory containing + single and multithread versions of the library (libboost_regex.a, libboost_regex.so, + libboost_regex_mt.a and libboost_regex_mt.so). When you build projects that + use Boost.Regex, you will need to add the boost install directory to your list + of include paths and add <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">>/</span><span class="identifier">libs</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">build</span><span class="special">/</span><span class="identifier">sunpro</span><span class="special">/</span></code> to + your library search path. + </p> +<p> + Both of the these makefiles support the following environment variables: + </p> +<p> + CXXFLAGS: extra compiler options - note that this applies to both the single + and multithreaded builds. + </p> +<p> + INCLUDES: additional include directories. + </p> +<p> + LDFLAGS: additional linker options. + </p> +<p> + LIBS: additional library files. + </p> +<p> + LIBSUFFIX: a suffix to mangle the library name with (defaults to nothing). + </p> +<p> + This makefile does not set any architecture specific options like -xarch=v9, + you can set these by defining the appropriate macros, for example: + </p> +<pre class="programlisting">dmake CXXFLAGS="-xarch=v9" LDFLAGS="-xarch=v9" LIBSUFFIX="_v9" -f sunpro.mak</pre> +<p> + will build v9 variants of the regex library named libboost_regex_v9.a etc. + </p> +<h6> +<a name="boost_regex.install.h7"></a> + <span><a name="boost_regex.install.makefiles_for_other_compilers"></a></span><a class="link" href="install.html#boost_regex.install.makefiles_for_other_compilers">Makefiles + for Other compilers</a> + </h6> +<p> + There is a generic makefile (generic.mak ) provided in <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">-</span><span class="identifier">root</span><span class="special">>/</span><span class="identifier">libs</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">build</span></code> - see that makefile for details of + environment variables that need to be set before use. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="configuration/tuning.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="introduction_and_overview.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/introduction_and_overview.html b/libs/regex/doc/html/boost_regex/introduction_and_overview.html new file mode 100644 index 0000000000..ebe808b5c2 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/introduction_and_overview.html @@ -0,0 +1,215 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Introduction and Overview</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="install.html" title="Building and Installing the Library"> +<link rel="next" href="unicode.html" title="Unicode and Boost.Regex"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="install.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unicode.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.introduction_and_overview"></a><a class="link" href="introduction_and_overview.html" title="Introduction and Overview">Introduction and + Overview</a> +</h2></div></div></div> +<p> + Regular expressions are a form of pattern-matching that are often used in text + processing; many users will be familiar with the Unix utilities grep, sed and + awk, and the programming language Perl, each of which make extensive use of + regular expressions. Traditionally C++ users have been limited to the POSIX + C API's for manipulating regular expressions, and while Boost.Regex does provide + these API's, they do not represent the best way to use the library. For example + Boost.Regex can cope with wide character strings, or search and replace operations + (in a manner analogous to either sed or Perl), something that traditional C + libraries can not do. + </p> +<p> + The class <a class="link" href="ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> + is the key class in this library; it represents a "machine readable" + regular expression, and is very closely modeled on <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code>, + think of it as a string plus the actual state-machine required by the regular + expression algorithms. Like <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code> + there are two typedefs that are almost always the means by which this class + is referenced: + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">traits</span> <span class="special">=</span> <span class="identifier">regex_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">basic_regex</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="keyword">char</span><span class="special">></span> <span class="identifier">regex</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="keyword">wchar_t</span><span class="special">></span> <span class="identifier">wregex</span><span class="special">;</span> + +<span class="special">}</span> +</pre> +<p> + To see how this library can be used, imagine that we are writing a credit card + processing application. Credit card numbers generally come as a string of 16-digits, + separated into groups of 4-digits, and separated by either a space or a hyphen. + Before storing a credit card number in a database (not necessarily something + your customers will appreciate!), we may want to verify that the number is + in the correct format. To match any digit we could use the regular expression + [0-9], however ranges of characters like this are actually locale dependent. + Instead we should use the POSIX standard form [[:digit:]], or the Boost.Regex + and Perl shorthand for this \d (note that many older libraries tended to be + hard-coded to the C-locale, consequently this was not an issue for them). That + leaves us with the following regular expression to validate credit card number + formats: + </p> +<pre class="programlisting">(\d{4}[- ]){3}\d{4}</pre> +<p> + Here the parenthesis act to group (and mark for future reference) sub-expressions, + and the {4} means "repeat exactly 4 times". This is an example of + the extended regular expression syntax used by Perl, awk and egrep. Boost.Regex + also supports the older "basic" syntax used by sed and grep, but + this is generally less useful, unless you already have some basic regular expressions + that you need to reuse. + </p> +<p> + Now let's take that expression and place it in some C++ code to validate the + format of a credit card number: + </p> +<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">validate_card_format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="string">"(\\d{4}[- ]){3}\\d{4}"</span><span class="special">);</span> + <span class="keyword">return</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">e</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Note how we had to add some extra escapes to the expression: remember that + the escape is seen once by the C++ compiler, before it gets to be seen by the + regular expression engine, consequently escapes in regular expressions have + to be doubled up when embedding them in C/C++ code. Also note that all the + examples assume that your compiler supports argument-dependent-lookup lookup, + if yours doesn't (for example VC6), then you will have to add some <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span></code> prefixes + to some of the function calls in the examples. + </p> +<p> + Those of you who are familiar with credit card processing, will have realized + that while the format used above is suitable for human readable card numbers, + it does not represent the format required by online credit card systems; these + require the number as a string of 16 (or possibly 15) digits, without any intervening + spaces. What we need is a means to convert easily between the two formats, + and this is where search and replace comes in. Those who are familiar with + the utilities sed and Perl will already be ahead here; we need two strings + - one a regular expression - the other a "format string" that provides + a description of the text to replace the match with. In Boost.Regex this search + and replace operation is performed with the algorithm <a class="link" href="ref/regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a>, for our credit card + example we can write two algorithms like this to provide the format conversions: + </p> +<pre class="programlisting"><span class="comment">// match any format with the regular expression:</span> +<span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="string">"\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"</span><span class="special">);</span> +<span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">machine_format</span><span class="special">(</span><span class="string">"\\1\\2\\3\\4"</span><span class="special">);</span> +<span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">human_format</span><span class="special">(</span><span class="string">"\\1-\\2-\\3-\\4"</span><span class="special">);</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">machine_readable_card_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">machine_format</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_default</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">format_sed</span><span class="special">);</span> +<span class="special">}</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">human_readable_card_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">human_format</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_default</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">format_sed</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Here we've used marked sub-expressions in the regular expression to split out + the four parts of the card number as separate fields, the format string then + uses the sed-like syntax to replace the matched text with the reformatted version. + </p> +<p> + In the examples above, we haven't directly manipulated the results of a regular + expression match, however in general the result of a match contains a number + of sub-expression matches in addition to the overall match. When the library + needs to report a regular expression match it does so using an instance of + the class <a class="link" href="ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a>, + as before there are typedefs of this class for the most common cases: + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> + +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> <span class="identifier">cmatch</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> <span class="identifier">wcmatch</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">smatch</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">wsmatch</span><span class="special">;</span> + +<span class="special">}</span> +</pre> +<p> + The algorithms <a class="link" href="ref/regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> + and <a class="link" href="ref/regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> + make use of <a class="link" href="ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> + to report what matched; the difference between these algorithms is that <a class="link" href="ref/regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> + will only find matches that consume <span class="emphasis"><em>all</em></span> of the input text, + where as <a class="link" href="ref/regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> + will search for a match anywhere within the text being matched. + </p> +<p> + Note that these algorithms are not restricted to searching regular C-strings, + any bidirectional iterator type can be searched, allowing for the possibility + of seamlessly searching almost any kind of data. + </p> +<p> + For search and replace operations, in addition to the algorithm <a class="link" href="ref/regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a> that we have already + seen, the <a class="link" href="ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> + class has a <code class="computeroutput"><span class="identifier">format</span></code> member that + takes the result of a match and a format string, and produces a new string + by merging the two. + </p> +<p> + For iterating through all occurences of an expression within a text, there + are two iterator types: <a class="link" href="ref/regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> will enumerate over + the <a class="link" href="ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> + objects found, while <a class="link" href="ref/regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> will enumerate + a series of strings (similar to perl style split operations). + </p> +<p> + For those that dislike templates, there is a high level wrapper class <a class="link" href="ref/deprecated_interfaces/old_regex.html" title="High Level Class RegEx (Deprecated)"><code class="computeroutput"><span class="identifier">RegEx</span></code></a> + that is an encapsulation of the lower level template code - it provides a simplified + interface for those that don't need the full power of the library, and supports + only narrow characters, and the "extended" regular expression syntax. + This class is now deprecated as it does not form part of the regular expressions + C++ standard library proposal. + </p> +<p> + The POSIX API functions: <a class="link" href="ref/posix.html#boost_regex.ref.posix.regcomp"><code class="computeroutput"><span class="identifier">regcomp</span></code></a>, <a class="link" href="ref/posix.html#boost_regex.ref.posix.regexec"><code class="computeroutput"><span class="identifier">regexec</span></code></a>, <a class="link" href="ref/posix.html#boost_regex.ref.posix.regfree"><code class="computeroutput"><span class="identifier">regfree</span></code></a> and [regerr], are available + in both narrow character and Unicode versions, and are provided for those who + need compatibility with these API's. + </p> +<p> + Finally, note that the library now has <a class="link" href="background_information/locale.html" title="Localization">run-time + localization support</a>, and recognizes the full POSIX regular expression + syntax - including advanced features like multi-character collating elements + and equivalence classes - as well as providing compatibility with other regular + expression libraries including GNU and BSD4 regex packages, PCRE and Perl 5. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="install.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unicode.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/partial_matches.html b/libs/regex/doc/html/boost_regex/partial_matches.html new file mode 100644 index 0000000000..99a1fc4b99 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/partial_matches.html @@ -0,0 +1,305 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Partial Matches</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="captures.html" title="Understanding Marked Sub-Expressions and Captures"> +<link rel="next" href="syntax.html" title="Regular Expression Syntax"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="captures.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.partial_matches"></a><a class="link" href="partial_matches.html" title="Partial Matches">Partial Matches</a> +</h2></div></div></div> +<p> + The <a class="link" href="ref/match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> + <code class="computeroutput"><span class="identifier">match_partial</span></code> can be passed + to the following algorithms: <a class="link" href="ref/regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a>, <a class="link" href="ref/regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a>, and <a class="link" href="ref/deprecated_interfaces/regex_grep.html" title="regex_grep (Deprecated)"><code class="computeroutput"><span class="identifier">regex_grep</span></code></a>, and used with the iterator + <a class="link" href="ref/regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>. + When used it indicates that partial as well as full matches should be found. + A partial match is one that matched one or more characters at the end of the + text input, but did not match all of the regular expression (although it may + have done so had more input been available). Partial matches are typically + used when either validating data input (checking each character as it is entered + on the keyboard), or when searching texts that are either too long to load + into memory (or even into a memory mapped file), or are of indeterminate length + (for example the source may be a socket or similar). Partial and full matches + can be differentiated as shown in the following table (the variable M represents + an instance of <a class="link" href="ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> as filled in by <a class="link" href="ref/regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a>, + <a class="link" href="ref/regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> + or <a class="link" href="ref/deprecated_interfaces/regex_grep.html" title="regex_grep (Deprecated)"><code class="computeroutput"><span class="identifier">regex_grep</span></code></a>): + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + </th> +<th> + <p> + Result + </p> + </th> +<th> + <p> + M[0].matched + </p> + </th> +<th> + <p> + M[0].first + </p> + </th> +<th> + <p> + M[0].second + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + No match + </p> + </td> +<td> + <p> + False + </p> + </td> +<td> + <p> + Undefined + </p> + </td> +<td> + <p> + Undefined + </p> + </td> +<td> + <p> + Undefined + </p> + </td> +</tr> +<tr> +<td> + <p> + Partial match + </p> + </td> +<td> + <p> + True + </p> + </td> +<td> + <p> + False + </p> + </td> +<td> + <p> + Start of partial match. + </p> + </td> +<td> + <p> + End of partial match (end of text). + </p> + </td> +</tr> +<tr> +<td> + <p> + Full match + </p> + </td> +<td> + <p> + True + </p> + </td> +<td> + <p> + True + </p> + </td> +<td> + <p> + Start of full match. + </p> + </td> +<td> + <p> + End of full match. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Be aware that using partial matches can sometimes result in somewhat imperfect + behavior: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + There are some expressions, such as ".*abc" that will always + produce a partial match. This problem can be reduced by careful construction + of the regular expressions used, or by setting flags like match_not_dot_newline + so that expressions like .* can't match past line boundaries. + </li> +<li class="listitem"> + Boost.Regex currently prefers leftmost matches to full matches, so for + example matching "abc|b" against "ab" produces a partial + match against the "ab" rather than a full match against "b". + It's more efficient to work this way, but may not be the behavior you want + in all situations. + </li> +</ul></div> +<p> + The following example tests to see whether the text could be a valid credit + card number, as the user presses a key, the character entered would be added + to the string being built up, and passed to <code class="computeroutput"><span class="identifier">is_possible_card_number</span></code>. + If this returns true then the text could be a valid card number, so the user + interface's OK button would be enabled. If it returns false, then this is not + yet a valid card number, but could be with more input, so the user interface + would disable the OK button. Finally, if the procedure throws an exception + the input could never become a valid number, and the inputted character must + be discarded, and a suitable error indication displayed to the user. + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="string">"(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})"</span><span class="special">);</span> + +<span class="keyword">bool</span> <span class="identifier">is_possible_card_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">input</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">//</span> + <span class="comment">// return false for partial match, true for full match, or throw for</span> + <span class="comment">// impossible match based on what we have so far...</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">what</span><span class="special">;</span> + <span class="keyword">if</span><span class="special">(</span><span class="number">0</span> <span class="special">==</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">input</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_default</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_partial</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// the input so far could not possibly be valid so reject it:</span> + <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span> + <span class="string">"Invalid data entered - this could not possibly be a valid card number"</span><span class="special">);</span> + <span class="special">}</span> + <span class="comment">// OK so far so good, but have we finished?</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">matched</span><span class="special">)</span> + <span class="special">{</span> + <span class="comment">// excellent, we have a result:</span> + <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span> + <span class="special">}</span> + <span class="comment">// what we have so far is only a partial match...</span> + <span class="keyword">return</span> <span class="keyword">false</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + In the following example, text input is taken from a stream containing an unknown + amount of text; this example simply counts the number of html tags encountered + in the stream. The text is loaded into a buffer and searched a part at a time, + if a partial match was encountered, then the partial match gets searched a + second time as the start of the next batch of text: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">fstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">sstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="comment">// match some kind of html tag:</span> +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="string">"<[^>]*>"</span><span class="special">);</span> +<span class="comment">// count how many:</span> +<span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">tags</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> + +<span class="keyword">void</span> <span class="identifier">search</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// buffer we'll be searching in:</span> + <span class="keyword">char</span> <span class="identifier">buf</span><span class="special">[</span><span class="number">4096</span><span class="special">];</span> + <span class="comment">// saved position of end of partial match:</span> + <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">next_pos</span> <span class="special">=</span> <span class="identifier">buf</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">buf</span><span class="special">);</span> + <span class="comment">// flag to indicate whether there is more input to come:</span> + <span class="keyword">bool</span> <span class="identifier">have_more</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">;</span> + + <span class="keyword">while</span><span class="special">(</span><span class="identifier">have_more</span><span class="special">)</span> + <span class="special">{</span> + <span class="comment">// how much do we copy forward from last try:</span> + <span class="keyword">unsigned</span> <span class="identifier">leftover</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">buf</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">buf</span><span class="special">))</span> <span class="special">-</span> <span class="identifier">next_pos</span><span class="special">;</span> + <span class="comment">// and how much is left to fill:</span> + <span class="keyword">unsigned</span> <span class="identifier">size</span> <span class="special">=</span> <span class="identifier">next_pos</span> <span class="special">-</span> <span class="identifier">buf</span><span class="special">;</span> + <span class="comment">// copy forward whatever we have left:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">memmove</span><span class="special">(</span><span class="identifier">buf</span><span class="special">,</span> <span class="identifier">next_pos</span><span class="special">,</span> <span class="identifier">leftover</span><span class="special">);</span> + <span class="comment">// fill the rest from the stream:</span> + <span class="identifier">is</span><span class="special">.</span><span class="identifier">read</span><span class="special">(</span><span class="identifier">buf</span> <span class="special">+</span> <span class="identifier">leftover</span><span class="special">,</span> <span class="identifier">size</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="identifier">read</span> <span class="special">=</span> <span class="identifier">is</span><span class="special">.</span><span class="identifier">gcount</span><span class="special">();</span> + <span class="comment">// check to see if we've run out of text:</span> + <span class="identifier">have_more</span> <span class="special">=</span> <span class="identifier">read</span> <span class="special">==</span> <span class="identifier">size</span><span class="special">;</span> + <span class="comment">// reset next_pos:</span> + <span class="identifier">next_pos</span> <span class="special">=</span> <span class="identifier">buf</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">buf</span><span class="special">);</span> + <span class="comment">// and then iterate:</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">cregex_iterator</span> <span class="identifier">a</span><span class="special">(</span> + <span class="identifier">buf</span><span class="special">,</span> + <span class="identifier">buf</span> <span class="special">+</span> <span class="identifier">read</span> <span class="special">+</span> <span class="identifier">leftover</span><span class="special">,</span> + <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_default</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_partial</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">cregex_iterator</span> <span class="identifier">b</span><span class="special">;</span> + + <span class="keyword">while</span><span class="special">(</span><span class="identifier">a</span> <span class="special">!=</span> <span class="identifier">b</span><span class="special">)</span> + <span class="special">{</span> + <span class="keyword">if</span><span class="special">((*</span><span class="identifier">a</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">matched</span> <span class="special">==</span> <span class="keyword">false</span><span class="special">)</span> + <span class="special">{</span> + <span class="comment">// Partial match, save position and break:</span> + <span class="identifier">next_pos</span> <span class="special">=</span> <span class="special">(*</span><span class="identifier">a</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span><span class="special">;</span> + <span class="keyword">break</span><span class="special">;</span> + <span class="special">}</span> + <span class="keyword">else</span> + <span class="special">{</span> + <span class="comment">// full match:</span> + <span class="special">++</span><span class="identifier">tags</span><span class="special">;</span> + <span class="special">}</span> + + <span class="comment">// move to next match:</span> + <span class="special">++</span><span class="identifier">a</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="captures.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref.html b/libs/regex/doc/html/boost_regex/ref.html new file mode 100644 index 0000000000..c2d9acb704 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref.html @@ -0,0 +1,125 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Reference</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="format/boost_format_syntax.html" title="Boost-Extended Format String Syntax"> +<link rel="next" href="ref/basic_regex.html" title="basic_regex"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="format/boost_format_syntax.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ref/basic_regex.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.ref"></a><a class="link" href="ref.html" title="Reference">Reference</a> +</h2></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="ref/basic_regex.html">basic_regex</a></span></dt> +<dt><span class="section"><a href="ref/match_results.html">match_results</a></span></dt> +<dt><span class="section"><a href="ref/sub_match.html">sub_match</a></span></dt> +<dt><span class="section"><a href="ref/regex_match.html">regex_match</a></span></dt> +<dt><span class="section"><a href="ref/regex_search.html">regex_search</a></span></dt> +<dt><span class="section"><a href="ref/regex_replace.html">regex_replace</a></span></dt> +<dt><span class="section"><a href="ref/regex_iterator.html">regex_iterator</a></span></dt> +<dt><span class="section"><a href="ref/regex_token_iterator.html">regex_token_iterator</a></span></dt> +<dt><span class="section"><a href="ref/bad_expression.html">bad_expression</a></span></dt> +<dt><span class="section"><a href="ref/syntax_option_type.html">syntax_option_type</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="ref/syntax_option_type/syntax_option_type_synopsis.html">syntax_option_type + Synopsis</a></span></dt> +<dt><span class="section"><a href="ref/syntax_option_type/syntax_option_type_overview.html">Overview + of syntax_option_type</a></span></dt> +<dt><span class="section"><a href="ref/syntax_option_type/syntax_option_type_perl.html">Options + for Perl Regular Expressions</a></span></dt> +<dt><span class="section"><a href="ref/syntax_option_type/syntax_option_type_extended.html">Options + for POSIX Extended Regular Expressions</a></span></dt> +<dt><span class="section"><a href="ref/syntax_option_type/syntax_option_type_basic.html">Options + for POSIX Basic Regular Expressions</a></span></dt> +<dt><span class="section"><a href="ref/syntax_option_type/syntax_option_type_literal.html">Options + for Literal Strings</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="ref/match_flag_type.html">match_flag_type</a></span></dt> +<dt><span class="section"><a href="ref/error_type.html">error_type</a></span></dt> +<dt><span class="section"><a href="ref/regex_traits.html">regex_traits</a></span></dt> +<dt><span class="section"><a href="ref/non_std_strings.html">Interfacing With Non-Standard + String Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="ref/non_std_strings/icu.html">Working With Unicode + and ICU String Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="ref/non_std_strings/icu/intro.html">Introduction + to using Regex with ICU</a></span></dt> +<dt><span class="section"><a href="ref/non_std_strings/icu/unicode_types.html">Unicode + regular expression types</a></span></dt> +<dt><span class="section"><a href="ref/non_std_strings/icu/unicode_algo.html">Unicode + Regular Expression Algorithms</a></span></dt> +<dt><span class="section"><a href="ref/non_std_strings/icu/unicode_iter.html">Unicode + Aware Regex Iterators</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="ref/non_std_strings/mfc_strings.html">Using + Boost Regex With MFC Strings</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="ref/non_std_strings/mfc_strings/mfc_intro.html">Introduction + to Boost.Regex and MFC Strings</a></span></dt> +<dt><span class="section"><a href="ref/non_std_strings/mfc_strings/mfc_regex_types.html">Regex + Types Used With MFC Strings</a></span></dt> +<dt><span class="section"><a href="ref/non_std_strings/mfc_strings/mfc_regex_create.html">Regular + Expression Creation From an MFC String</a></span></dt> +<dt><span class="section"><a href="ref/non_std_strings/mfc_strings/mfc_algo.html">Overloaded + Algorithms For MFC String Types</a></span></dt> +<dt><span class="section"><a href="ref/non_std_strings/mfc_strings/mfc_iter.html">Iterating + Over the Matches Within An MFC String</a></span></dt> +</dl></dd> +</dl></dd> +<dt><span class="section"><a href="ref/posix.html">POSIX Compatible C API's</a></span></dt> +<dt><span class="section"><a href="ref/concepts.html">Concepts</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="ref/concepts/charT_concept.html">charT Requirements</a></span></dt> +<dt><span class="section"><a href="ref/concepts/traits_concept.html">Traits Class + Requirements</a></span></dt> +<dt><span class="section"><a href="ref/concepts/iterator_concepts.html">Iterator + Requirements</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="ref/deprecated_interfaces.html">Deprecated Interfaces</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="ref/deprecated_interfaces/regex_format.html">regex_format + (Deprecated)</a></span></dt> +<dt><span class="section"><a href="ref/deprecated_interfaces/regex_grep.html">regex_grep + (Deprecated)</a></span></dt> +<dt><span class="section"><a href="ref/deprecated_interfaces/regex_split.html">regex_split + (deprecated)</a></span></dt> +<dt><span class="section"><a href="ref/deprecated_interfaces/old_regex.html">High + Level Class RegEx (Deprecated)</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="ref/internal_details.html">Internal Details</a></span></dt> +<dd><dl><dt><span class="section"><a href="ref/internal_details/uni_iter.html">Unicode + Iterators</a></span></dt></dl></dd> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="format/boost_format_syntax.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ref/basic_regex.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/bad_expression.html b/libs/regex/doc/html/boost_regex/ref/bad_expression.html new file mode 100644 index 0000000000..381b423d65 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/bad_expression.html @@ -0,0 +1,103 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>bad_expression</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="regex_token_iterator.html" title="regex_token_iterator"> +<link rel="next" href="syntax_option_type.html" title="syntax_option_type"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_token_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.bad_expression"></a><a class="link" href="bad_expression.html" title="bad_expression">bad_expression</a> +</h3></div></div></div> +<h5> +<a name="boost_regex.ref.bad_expression.h0"></a> + <span><a name="boost_regex.ref.bad_expression.synopsis"></a></span><a class="link" href="bad_expression.html#boost_regex.ref.bad_expression.synopsis">Synopsis</a> + </h5> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">pattern_except</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The class <code class="computeroutput"><span class="identifier">regex_error</span></code> defines + the type of objects thrown as exceptions to report errors during the conversion + from a string representing a regular expression to a finite state machine. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> + +<span class="keyword">class</span> <span class="identifier">regex_error</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span> +<span class="special">{</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="keyword">explicit</span> <span class="identifier">regex_error</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">error_type</span> <span class="identifier">err</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">pos</span><span class="special">);</span> + <span class="keyword">explicit</span> <span class="identifier">regex_error</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">error_type</span> <span class="identifier">err</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">error_type</span> <span class="identifier">code</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">position</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +<span class="special">};</span> + +<span class="keyword">typedef</span> <span class="identifier">regex_error</span> <span class="identifier">bad_pattern</span><span class="special">;</span> <span class="comment">// for backwards compatibility</span> +<span class="keyword">typedef</span> <span class="identifier">regex_error</span> <span class="identifier">bad_expression</span><span class="special">;</span> <span class="comment">// for backwards compatibility</span> + +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<h5> +<a name="boost_regex.ref.bad_expression.h1"></a> + <span><a name="boost_regex.ref.bad_expression.description"></a></span><a class="link" href="bad_expression.html#boost_regex.ref.bad_expression.description">Description</a> + </h5> +<pre class="programlisting"><span class="identifier">regex_error</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">error_type</span> <span class="identifier">err</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">pos</span><span class="special">);</span> +<span class="identifier">regex_error</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">error_type</span> <span class="identifier">err</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects:</strong></span> Constructs an object of class regex_error. + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">error_type</span> <span class="identifier">code</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects:</strong></span> returns the error code that represents + parsing error that occurred. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">position</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects:</strong></span> returns the location in the expression + where parsing stopped. + </p> +<p> + Footnotes: the choice of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + as the base class for <code class="computeroutput"><span class="identifier">regex_error</span></code> + is moot; depending upon how the library is used exceptions may be either + logic errors (programmer supplied expressions) or run time errors (user supplied + expressions). The library previously used <code class="computeroutput"><span class="identifier">bad_pattern</span></code> + and <code class="computeroutput"><span class="identifier">bad_expression</span></code> for errors, + these have been replaced by the single class <code class="computeroutput"><span class="identifier">regex_error</span></code> + to keep the library in synchronization with the <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">Technical + Report on C++ Library Extensions</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_token_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/basic_regex.html b/libs/regex/doc/html/boost_regex/ref/basic_regex.html new file mode 100644 index 0000000000..217c5106e8 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/basic_regex.html @@ -0,0 +1,1260 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>basic_regex</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="../ref.html" title="Reference"> +<link rel="next" href="match_results.html" title="match_results"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="match_results.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.basic_regex"></a><a class="link" href="basic_regex.html" title="basic_regex">basic_regex</a> +</h3></div></div></div> +<h5> +<a name="boost_regex.ref.basic_regex.h0"></a> + <span><a name="boost_regex.ref.basic_regex.synopsis"></a></span><a class="link" href="basic_regex.html#boost_regex.ref.basic_regex.synopsis">Synopsis</a> + </h5> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The template class <code class="computeroutput"><span class="identifier">basic_regex</span></code> + encapsulates regular expression parsing and compilation. The class takes + two template parameters: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">charT</span></code>: determines the + character type, i.e. either <code class="computeroutput"><span class="keyword">char</span></code> + or <code class="computeroutput"><span class="keyword">wchar_t</span></code>; see <a class="link" href="concepts/charT_concept.html" title="charT Requirements">charT + concept</a>. + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">traits</span></code>: determines the + behavior of the character type, for example which character class names + are recognized. A default traits class is provided: <code class="computeroutput"><span class="identifier">regex_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span></code>. See also <a class="link" href="concepts/traits_concept.html" title="Traits Class Requirements">traits + concept</a>. + </li> +</ul></div> +<p> + For ease of use there are two typedefs that define the two standard <code class="computeroutput"><span class="identifier">basic_regex</span></code> instances, unless you want + to use custom traits classes or non-standard character types (for example + see <a class="link" href="non_std_strings/icu.html" title="Working With Unicode and ICU String Types">unicode support</a>), + you won't need to use anything other than these: + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span> <span class="special">=</span> <span class="identifier">regex_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">basic_regex</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="keyword">char</span><span class="special">></span> <span class="identifier">regex</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="keyword">wchar_t</span><span class="special">></span> <span class="identifier">wregex</span><span class="special">;</span> + +<span class="special">}</span> +</pre> +<p> + The definition of <code class="computeroutput"><span class="identifier">basic_regex</span></code> + follows: it is based very closely on class <code class="computeroutput"><span class="identifier">basic_string</span></code>, + and fulfils the requirements for a constant-container of <code class="computeroutput"><span class="identifier">charT</span></code>. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span> <span class="special">=</span> <span class="identifier">regex_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">basic_regex</span> <span class="special">{</span> + <span class="keyword">public</span><span class="special">:</span> + <span class="comment">// types:</span> + <span class="keyword">typedef</span> <span class="identifier">charT</span> <span class="identifier">value_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">implementation</span><span class="special">-</span><span class="identifier">specific</span> <span class="identifier">const_iterator</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">const_iterator</span> <span class="identifier">iterator</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">charT</span><span class="special">&</span> <span class="identifier">reference</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">&</span> <span class="identifier">const_reference</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">difference_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">flag_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">locale_type</span> <span class="identifier">locale_type</span><span class="special">;</span> + + <span class="comment">// constants:</span> + <span class="comment">// main option selection:</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">normal</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">ECMAScript</span> + <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">JavaScript</span> + <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">JScript</span> + <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">basic</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">basic</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">extended</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">extended</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">awk</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">awk</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">grep</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">grep</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">egrep</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">egrep</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">sed</span> + <span class="special">=</span> <span class="identifier">basic</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">sed</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">perl</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">perl</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">literal</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">literal</span><span class="special">;</span> + + <span class="comment">// modifiers specific to perl expressions:</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_mod_m</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">no_mod_m</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_mod_s</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">no_mod_s</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">mod_s</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">mod_s</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">mod_x</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">mod_x</span><span class="special">;</span> + + <span class="comment">// modifiers specific to POSIX basic expressions:</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">bk_plus_qm</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">bk_plus_qm</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">bk_vbar</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">bk_vbar</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_char_classes</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">no_char_classes</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_intervals</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">no_intervals</span> + + <span class="comment">// common modifiers:</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">nosubs</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">nosubs</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">optimize</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">optimize</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">collate</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">collate</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">newline_alt</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">newline_alt</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_except</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">newline_alt</span><span class="special">;</span> + + <span class="comment">// construct/copy/destroy:</span> + <span class="keyword">explicit</span> <a class="link" href="basic_regex.html#boost_regex.basic_regex.construct1">basic_regex</a> <span class="special">();</span> + <span class="keyword">explicit</span> <a class="link" href="basic_regex.html#boost_regex.basic_regex.construct2">basic_regex</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.construct3">basic_regex</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p2</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.construct4">basic_regex</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">size_type</span> <span class="identifier">len</span><span class="special">,</span> <span class="identifier">flag_type</span> <span class="identifier">f</span><span class="special">);</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.construct5">basic_regex</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> + <span class="keyword">explicit</span> <a class="link" href="basic_regex.html#boost_regex.basic_regex.construct6">basic_regex</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">InputIterator</span><span class="special">></span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.construct7">basic_regex</a><span class="special">(</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> + + <span class="special">~</span><span class="identifier">basic_regex</span><span class="special">();</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.opeq1">basic_regex& operator=</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&);</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.opeq2">basic_regex& operator=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.opeq3">basic_regex& operator=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">);</span> + <span class="comment">// iterators: </span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.subexpression">std::pair<const_iterator, const_iterator> subexpression</a><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.begin">const_iterator begin</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.end">const_iterator end</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="comment">// capacity: </span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.size">size_type size</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.max_size">size_type max_size</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.empty">bool empty</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.mark_count">size_type mark_count</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// modifiers: </span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign1">basic_regex& assign</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign2">basic_regex& assign</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign3">basic_regex& assign</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">len</span><span class="special">,</span> <span class="identifier">flag_type</span> <span class="identifier">f</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">string_traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign4">basic_regex& assign</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">string_traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">InputIterator</span><span class="special">></span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign5">basic_regex& assign</a><span class="special">(</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> + + <span class="comment">// const operations:</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.flags">flag_type flags</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.status">int status</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.str">basic_string<charT> str</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.compare">int compare</a><span class="special">(</span><span class="identifier">basic_regex</span><span class="special">&)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="comment">// locale:</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.imbue">locale_type imbue</a><span class="special">(</span><span class="identifier">locale_type</span> <span class="identifier">loc</span><span class="special">);</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.getloc">locale_type getloc</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="comment">// swap</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.swap">void swap</a><span class="special">(</span><span class="identifier">basic_regex</span><span class="special">&)</span> <span class="keyword">throw</span><span class="special">();</span> +<span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<a class="link" href="basic_regex.html#boost_regex.basic_regex.op_eq">bool operator ==</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<a class="link" href="basic_regex.html#boost_regex.basic_regex.op_ne">bool operator !=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<a class="link" href="basic_regex.html#boost_regex.basic_regex.op_lt">bool operator <</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<a class="link" href="basic_regex.html#boost_regex.basic_regex.op_le">bool operator <=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<a class="link" href="basic_regex.html#boost_regex.basic_regex.op_ge">bool operator >=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<a class="link" href="basic_regex.html#boost_regex.basic_regex.op_gt">bool operator ></a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">io_traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">re_traits</span><span class="special">></span> +<span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">io_traits</span><span class="special">>&</span> + <a class="link" href="basic_regex.html#boost_regex.basic_regex.op_stream">operator <<</a> <span class="special">(</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">io_traits</span><span class="special">>&</span> <span class="identifier">os</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">re_traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<a class="link" href="basic_regex.html#boost_regex.basic_regex.op_swap">void swap</a><span class="special">(</span><span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e1</span><span class="special">,</span> + <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e2</span><span class="special">);</span> + +<span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="keyword">char</span><span class="special">></span> <span class="identifier">regex</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="keyword">wchar_t</span><span class="special">></span> <span class="identifier">wregex</span><span class="special">;</span> + +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<h5> +<a name="boost_regex.ref.basic_regex.h1"></a> + <span><a name="boost_regex.ref.basic_regex.description"></a></span><a class="link" href="basic_regex.html#boost_regex.ref.basic_regex.description">Description</a> + </h5> +<p> + Class <code class="computeroutput"><span class="identifier">basic_regex</span></code> has the + following public members: + </p> +<pre class="programlisting"><span class="comment">// main option selection:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">normal</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">ECMAScript</span> + <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">JavaScript</span> + <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">JScript</span> + <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">basic</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">basic</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">extended</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">extended</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">awk</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">awk</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">grep</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">grep</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">egrep</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">egrep</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">sed</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">sed</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">perl</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">perl</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">literal</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">literal</span><span class="special">;</span> + +<span class="comment">// modifiers specific to perl expressions:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_mod_m</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">no_mod_m</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_mod_s</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">no_mod_s</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">mod_s</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">mod_s</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">mod_x</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">mod_x</span><span class="special">;</span> + +<span class="comment">// modifiers specific to POSIX basic expressions:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">bk_plus_qm</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">bk_plus_qm</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">bk_vbar</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">bk_vbar</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_char_classes</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">no_char_classes</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">no_intervals</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">no_intervals</span> + +<span class="comment">// common modifiers:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">nosubs</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">nosubs</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">optimize</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">optimize</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">collate</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">collate</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">regex_constants</span><span class="special">::</span> <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> <span class="identifier">newline_alt</span> + <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">newline_alt</span><span class="special">;</span> +</pre> +<p> + The meaning of these options is documented in the <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> section. + </p> +<p> + The static constant members are provided as synonyms for the constants declared + in namespace <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span></code>; for each constant of type + <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> + declared in namespace <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span></code> + then a constant with the same name, type and value is declared within the + scope of basic_regex. + </p> +<a name="boost_regex.basic_regex.construct1"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">();</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class + <code class="computeroutput"><span class="identifier">basic_regex</span></code>. + </p> +<div class="table"> +<a name="boost_regex.ref.basic_regex.t0"></a><p class="title"><b>Table 1. basic_regex default construction postconditions</b></p> +<div class="table-contents"><table class="table" summary="basic_regex default construction postconditions"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">true</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="number">0</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">str</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>()</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><a name="boost_regex.basic_regex.construct2"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: <span class="emphasis"><em>p</em></span> shall not + be a null pointer. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <a class="link" href="bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> if <span class="emphasis"><em>p</em></span> + is not a valid regular expression, unless the flag <code class="computeroutput"><span class="identifier">no_except</span></code> + is set in <span class="emphasis"><em>f</em></span>. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class + <a class="link" href="basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>; + the object's internal finite state machine is constructed from the regular + expression contained in the null-terminated string <span class="emphasis"><em>p</em></span>, + and interpreted according to the <a class="link" href="syntax_option_type.html" title="syntax_option_type">option + flags</a> specified in <span class="emphasis"><em>f</em></span>. + </p> +<div class="table"> +<a name="boost_regex.ref.basic_regex.t1"></a><p class="title"><b>Table 2. Postconditions for basic_regex construction</b></p> +<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">char_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">str</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>(</span><span class="identifier">p</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">flags</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>f</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + The number of marked sub-expressions within the expression. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><a name="boost_regex.basic_regex.construct3"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p2</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: <span class="emphasis"><em>p1</em></span> and <span class="emphasis"><em>p2</em></span> + are not null pointers, <code class="computeroutput"><span class="identifier">p1</span> <span class="special"><</span> <span class="identifier">p2</span></code>. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: bad_expression if [p1,p2) is not + a valid regular expression, unless the flag <code class="computeroutput"><span class="identifier">no_except</span></code> + is set in <span class="emphasis"><em>f</em></span>. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class + <a class="link" href="basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>; + the object's internal finite state machine is constructed from the regular + expression contained in the sequence of characters [p1,p2), and interpreted + according the <a class="link" href="syntax_option_type.html" title="syntax_option_type">option flags</a> + specified in <span class="emphasis"><em>f</em></span>. + </p> +<div class="table"> +<a name="boost_regex.ref.basic_regex.t2"></a><p class="title"><b>Table 3. Postconditions for basic_regex construction</b></p> +<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span><span class="identifier">p2</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">str</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>(</span><span class="identifier">p1</span><span class="special">,</span><span class="identifier">p2</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">flags</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>f</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + The number of marked sub-expressions within the expression. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><a name="boost_regex.basic_regex.construct4"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">size_type</span> <span class="identifier">len</span><span class="special">,</span> <span class="identifier">flag_type</span> <span class="identifier">f</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: <span class="emphasis"><em>p</em></span> shall not + be a null pointer, <code class="computeroutput"><span class="identifier">len</span> <span class="special"><</span> + <span class="identifier">max_size</span><span class="special">()</span></code>. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <a class="link" href="bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> if <span class="emphasis"><em>p</em></span> + is not a valid regular expression, unless the flag <code class="computeroutput"><span class="identifier">no_except</span></code> + is set in <span class="emphasis"><em>f</em></span>. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class + <a class="link" href="basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>; + the object's internal finite state machine is constructed from the regular + expression contained in the sequence of characters [p, p+len), and interpreted + according the option flags specified in <span class="emphasis"><em>f</em></span>. + </p> +<div class="table"> +<a name="boost_regex.ref.basic_regex.t3"></a><p class="title"><b>Table 4. Postconditions for basic_regex construction</b></p> +<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>len</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">str</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>(</span><span class="identifier">p</span><span class="special">,</span> + <span class="identifier">len</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">flags</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>f</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + The number of marked sub-expressions within the expression. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><a name="boost_regex.basic_regex.construct5"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class + <a class="link" href="basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> + as a copy of the object <span class="emphasis"><em>e</em></span>. + </p> +<a name="boost_regex.basic_regex.construct6"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> +<span class="identifier">basic_regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Throws</strong></span>: <a class="link" href="bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> if <span class="emphasis"><em>s</em></span> + is not a valid regular expression, unless the flag <code class="computeroutput"><span class="identifier">no_except</span></code> + is set in <span class="emphasis"><em>f</em></span>. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class + <a class="link" href="basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>; + the object's internal finite state machine is constructed from the regular + expression contained in the string <span class="emphasis"><em>s</em></span>, and interpreted + according to the <a class="link" href="syntax_option_type.html" title="syntax_option_type">option + flags</a> specified in <span class="emphasis"><em>f</em></span>. + </p> +<div class="table"> +<a name="boost_regex.ref.basic_regex.t4"></a><p class="title"><b>Table 5. Postconditions for basic_regex construction</b></p> +<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">str</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>s</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">flags</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>f</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + The number of marked sub-expressions within the expression. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><a name="boost_regex.basic_regex.construct7"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ForwardIterator</span><span class="special">></span> +<span class="identifier">basic_regex</span><span class="special">(</span><span class="identifier">ForwardIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">ForwardIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Throws</strong></span>: <a class="link" href="bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> if the sequence [first, + last) is not a valid regular expression, unless the flag <code class="computeroutput"><span class="identifier">no_except</span></code> + is set in <span class="emphasis"><em>f</em></span>. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class + <a class="link" href="basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>; + the object's internal finite state machine is constructed from the regular + expression contained in the sequence of characters [first, last), and interpreted + according to the <a class="link" href="syntax_option_type.html" title="syntax_option_type">option + flags</a> specified in <span class="emphasis"><em>f</em></span>. + </p> +<div class="table"> +<a name="boost_regex.ref.basic_regex.t5"></a><p class="title"><b>Table 6. Postconditions for basic_regex construction</b></p> +<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">last</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">str</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>(</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">last</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">flags</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>f</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + The number of marked sub-expressions within the expression. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><a name="boost_regex.basic_regex.opeq1"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">assign</span><span class="special">(</span><span class="identifier">e</span><span class="special">.</span><span class="identifier">str</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">.</span><span class="identifier">flags</span><span class="special">())</span></code>. + </p> +<a name="boost_regex.basic_regex.opeq2"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: <span class="emphasis"><em>p</em></span> shall not + be a null pointer. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">assign</span><span class="special">(</span><span class="identifier">ptr</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.basic_regex.opeq3"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> +<span class="identifier">basic_regex</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">assign</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.basic_regex.subexpression"></a><pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">subexpression</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a pair of iterators denoting + the location of marked subexpression <span class="emphasis"><em>n</em></span> within the original + regular expression string. The returned iterators are relative to <code class="computeroutput"><span class="identifier">begin</span><span class="special">()</span></code> + and <code class="computeroutput"><span class="identifier">end</span><span class="special">()</span></code>. + </p> +<p> + <span class="bold"><strong>Requires</strong></span>: The expression must have been + compiled with the <a class="link" href="syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> save_subexpression_location + set. Argument <span class="emphasis"><em>n</em></span> must be in within the range <code class="computeroutput"><span class="number">1</span> <span class="special"><=</span> <span class="identifier">n</span> + <span class="special"><</span> <span class="identifier">mark_count</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.basic_regex.begin"></a><pre class="programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a starting iterator to + a sequence of characters representing the regular expression. + </p> +<a name="boost_regex.basic_regex.end"></a><pre class="programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns termination iterator to + a sequence of characters representing the regular expression. + </p> +<a name="boost_regex.basic_regex.size"></a><pre class="programlisting"><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the length of the sequence + of characters representing the regular expression. + </p> +<a name="boost_regex.basic_regex.max_size"></a><pre class="programlisting"><span class="identifier">size_type</span> <span class="identifier">max_size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the maximum length of the + sequence of characters representing the regular expression. + </p> +<a name="boost_regex.basic_regex.empty"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns true if the object does + not contain a valid regular expression, otherwise false. + </p> +<a name="boost_regex.basic_regex.mark_count"></a><pre class="programlisting"><span class="identifier">size_type</span> <span class="identifier">mark_count</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the number of marked sub-expressions + within the regular expresion. + </p> +<a name="boost_regex.basic_regex.assign1"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign4"><code class="computeroutput"><span class="identifier">assign</span><span class="special">(</span><span class="identifier">that</span><span class="special">.</span><span class="identifier">str</span><span class="special">(),</span> <span class="identifier">that</span><span class="special">.</span><span class="identifier">flags</span><span class="special">())</span></code></a>. + </p> +<a name="boost_regex.basic_regex.assign2"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign4"><code class="computeroutput"><span class="identifier">assign</span><span class="special">(</span><span class="identifier">string_type</span><span class="special">(</span><span class="identifier">ptr</span><span class="special">),</span> <span class="identifier">f</span><span class="special">)</span></code></a>. + </p> +<a name="boost_regex.basic_regex.assign3"></a><pre class="programlisting"><span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">len</span><span class="special">,</span> <span class="identifier">flag_type</span> <span class="identifier">f</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign4"><code class="computeroutput"><span class="identifier">assign</span><span class="special">(</span><span class="identifier">string_type</span><span class="special">(</span><span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">len</span><span class="special">),</span> <span class="identifier">f</span><span class="special">)</span></code></a>. + </p> +<a name="boost_regex.basic_regex.assign4"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">string_traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">string_traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Throws</strong></span>: <a class="link" href="bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> if <span class="emphasis"><em>s</em></span> + is not a valid regular expression, unless the flag <code class="computeroutput"><span class="identifier">no_except</span></code> + is set in <span class="emphasis"><em>f</em></span>. + </p> +<p> + <span class="bold"><strong>Returns</strong></span>: *this. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Assigns the regular expression + contained in the string <span class="emphasis"><em>s</em></span>, interpreted according the + <a class="link" href="syntax_option_type.html" title="syntax_option_type">option flags</a> specified + in <span class="emphasis"><em>f</em></span>. + </p> +<div class="table"> +<a name="boost_regex.ref.basic_regex.t6"></a><p class="title"><b>Table 7. Postconditions for basic_regex::assign</b></p> +<div class="table-contents"><table class="table" summary="Postconditions for basic_regex::assign"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">str</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>s</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">flags</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <span class="emphasis"><em>f</em></span> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + The number of marked sub-expressions within the expression. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><a name="boost_regex.basic_regex.assign5"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">InputIterator</span><span class="special">></span> +<span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">InputIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">InputIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="identifier">flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: The type <code class="computeroutput"><span class="identifier">InputIterator</span></code> + corresponds to the <a href="http://input_iterator" target="_top">Input Iterator requirements + (24.1.1)</a>. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <a class="link" href="basic_regex.html#boost_regex.basic_regex.assign4"><code class="computeroutput"><span class="identifier">assign</span><span class="special">(</span><span class="identifier">string_type</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">),</span> <span class="identifier">f</span><span class="special">)</span></code></a>. + </p> +<a name="boost_regex.basic_regex.flags"></a><pre class="programlisting"><span class="identifier">flag_type</span> <span class="identifier">flags</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a copy of the <a class="link" href="syntax_option_type.html" title="syntax_option_type">regular + expression syntax flags</a> that were passed to the object's constructor, + or the last call to <code class="computeroutput"><span class="identifier">assign</span></code>. + </p> +<a name="boost_regex.basic_regex.status"></a><pre class="programlisting"><span class="keyword">int</span> <span class="identifier">status</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns zero if the expression + contains a valid regular expression, otherwise an error code. This member + function is retained for use in environments that cannot use exception handling. + </p> +<a name="boost_regex.basic_regex.str"></a><pre class="programlisting"><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="identifier">str</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a copy of the character + sequence passed to the object's constructor, or the last call to assign. + </p> +<a name="boost_regex.basic_regex.compare"></a><pre class="programlisting"><span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: If <code class="computeroutput"><span class="identifier">flags</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">e</span><span class="special">.</span><span class="identifier">flags</span><span class="special">()</span></code> then returns <code class="computeroutput"><span class="identifier">str</span><span class="special">().</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">e</span><span class="special">.</span><span class="identifier">str</span><span class="special">())</span></code>, + otherwise returns <code class="computeroutput"><span class="identifier">flags</span><span class="special">()</span> + <span class="special">-</span> <span class="identifier">e</span><span class="special">.</span><span class="identifier">flags</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.basic_regex.imbue"></a><pre class="programlisting"><span class="identifier">locale_type</span> <span class="identifier">imbue</span><span class="special">(</span><span class="identifier">locale_type</span> <span class="identifier">l</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">traits_inst</span><span class="special">.</span><span class="identifier">imbue</span><span class="special">(</span><span class="identifier">l</span><span class="special">)</span></code> where + <code class="computeroutput"><span class="identifier">traits_inst</span></code> is a (default + initialized) instance of the template parameter <code class="computeroutput"><span class="identifier">traits</span></code> + stored within the object. Calls to <code class="computeroutput"><span class="identifier">imbue</span></code> + invalidate any currently contained regular expression. + </p> +<p> + <span class="bold"><strong>Postcondition</strong></span>: <code class="computeroutput"><span class="identifier">empty</span><span class="special">()</span> <span class="special">==</span> <span class="keyword">true</span></code>. + </p> +<a name="boost_regex.basic_regex.getloc"></a><pre class="programlisting"><span class="identifier">locale_type</span> <span class="identifier">getloc</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">traits_inst</span><span class="special">.</span><span class="identifier">getloc</span><span class="special">()</span></code> + where <code class="computeroutput"><span class="identifier">traits_inst</span></code> is a (default + initialized) instance of the template parameter traits stored within the + object. + </p> +<a name="boost_regex.basic_regex.swap"></a><pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">basic_regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">)</span> <span class="keyword">throw</span><span class="special">();</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Swaps the contents of the two regular + expressions. + </p> +<p> + <span class="bold"><strong>Postcondition</strong></span>: <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> contains the regular expression that + was in <span class="emphasis"><em>e</em></span>, <span class="emphasis"><em>e</em></span> contains the regular + expression that was in <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. + </p> +<p> + <span class="bold"><strong>Complexity</strong></span>: constant time. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + Comparisons between <a class="link" href="basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> objects are provided + on an experimental basis: please note that these are not present in the + <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">Technical + Report on C++ Library Extensions</a>, so use with care if you are writing + code that may need to be ported to other implementations of <a class="link" href="basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>. + </p></td></tr> +</table></div> +<a name="boost_regex.basic_regex.op_eq"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special">==</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.basic_regex.op_ne"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special">!=</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.basic_regex.op_lt"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special"><</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.basic_regex.op_le"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special"><=</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.basic_regex.op_ge"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special">>=</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.basic_regex.op_gt"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special">></span> <span class="number">0</span></code>. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The basic_regex stream inserter is provided on an experimental basis, and + outputs the textual representation of the expression to the stream. + </p></td></tr> +</table></div> +<a name="boost_regex.basic_regex.op_stream"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">io_traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">re_traits</span><span class="special">></span> +<span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">io_traits</span><span class="special">>&</span> + <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">io_traits</span><span class="special">>&</span> <span class="identifier">os</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">re_traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns <code class="computeroutput"><span class="special">(</span><span class="identifier">os</span> <span class="special"><<</span> <span class="identifier">e</span><span class="special">.</span><span class="identifier">str</span><span class="special">())</span></code>. + </p> +<a name="boost_regex.basic_regex.op_swap"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: calls <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span></code>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="match_results.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/concepts.html b/libs/regex/doc/html/boost_regex/ref/concepts.html new file mode 100644 index 0000000000..353228cf7e --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/concepts.html @@ -0,0 +1,50 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Concepts</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="posix.html" title="POSIX Compatible C API's"> +<link rel="next" href="concepts/charT_concept.html" title="charT Requirements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="posix.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="concepts/charT_concept.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.concepts"></a><a class="link" href="concepts.html" title="Concepts">Concepts</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="concepts/charT_concept.html">charT Requirements</a></span></dt> +<dt><span class="section"><a href="concepts/traits_concept.html">Traits Class + Requirements</a></span></dt> +<dt><span class="section"><a href="concepts/iterator_concepts.html">Iterator + Requirements</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="posix.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="concepts/charT_concept.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/concepts/charT_concept.html b/libs/regex/doc/html/boost_regex/ref/concepts/charT_concept.html new file mode 100644 index 0000000000..01ba8b0db1 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/concepts/charT_concept.html @@ -0,0 +1,272 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>charT Requirements</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../concepts.html" title="Concepts"> +<link rel="prev" href="../concepts.html" title="Concepts"> +<link rel="next" href="traits_concept.html" title="Traits Class Requirements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../concepts.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="traits_concept.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.concepts.charT_concept"></a><a class="link" href="charT_concept.html" title="charT Requirements">charT Requirements</a> +</h4></div></div></div> +<p> + Type <code class="computeroutput"><span class="identifier">charT</span></code> used a template + argument to class template <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>, must have a trivial + default constructor, copy constructor, assignment operator, and destructor. + In addition the following requirements must be met for objects; <span class="emphasis"><em>c</em></span> + of type <code class="computeroutput"><span class="identifier">charT</span></code>, <span class="emphasis"><em>c1</em></span> + and <span class="emphasis"><em>c2</em></span> of type <code class="computeroutput"><span class="identifier">charT</span> + <span class="keyword">const</span></code>, and <span class="emphasis"><em>i</em></span> + of type <code class="computeroutput"><span class="keyword">int</span></code>: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Return type + </p> + </th> +<th> + <p> + Assertion / Note / Pre- / Post-condition + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + charT c + </p> + </td> +<td> + <p> + charT + </p> + </td> +<td> + <p> + Default constructor (must be trivial). + </p> + </td> +</tr> +<tr> +<td> + <p> + charT c(c1) + </p> + </td> +<td> + <p> + charT + </p> + </td> +<td> + <p> + Copy constructor (must be trivial). + </p> + </td> +</tr> +<tr> +<td> + <p> + c1 = c2 + </p> + </td> +<td> + <p> + charT + </p> + </td> +<td> + <p> + Assignment operator (must be trivial). + </p> + </td> +</tr> +<tr> +<td> + <p> + c1 == c2 + </p> + </td> +<td> + <p> + bool + </p> + </td> +<td> + <p> + true if c1 has the same value as c2. + </p> + </td> +</tr> +<tr> +<td> + <p> + c1 != c2 + </p> + </td> +<td> + <p> + bool + </p> + </td> +<td> + <p> + true if c1 and c2 are not equal. + </p> + </td> +</tr> +<tr> +<td> + <p> + c1 < c2 + </p> + </td> +<td> + <p> + bool + </p> + </td> +<td> + <p> + true if the value of c1 is less than c2. + </p> + </td> +</tr> +<tr> +<td> + <p> + c1 > c2 + </p> + </td> +<td> + <p> + bool + </p> + </td> +<td> + <p> + true if the value of c1 is greater than c2. + </p> + </td> +</tr> +<tr> +<td> + <p> + c1 <= c2 + </p> + </td> +<td> + <p> + bool + </p> + </td> +<td> + <p> + true if c1 is less than or equal to c2. + </p> + </td> +</tr> +<tr> +<td> + <p> + c1 >= c2 + </p> + </td> +<td> + <p> + bool + </p> + </td> +<td> + <p> + true if c1 is greater than or equal to c2. + </p> + </td> +</tr> +<tr> +<td> + <p> + intmax_t i = c1 + </p> + </td> +<td> + <p> + int + </p> + </td> +<td> + <p> + charT must be convertible to an integral type. + </p> + <p> + Note: type charT is not required to support this operation, if + the traits class used supports the full Boost-specific interface, + rather than the minimal standardised-interface (see traits class + requirements below). + </p> + </td> +</tr> +<tr> +<td> + <p> + charT c(i); + </p> + </td> +<td> + <p> + charT + </p> + </td> +<td> + <p> + charT must be constructable from an integral type. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../concepts.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="traits_concept.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/concepts/iterator_concepts.html b/libs/regex/doc/html/boost_regex/ref/concepts/iterator_concepts.html new file mode 100644 index 0000000000..5df6aadaed --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/concepts/iterator_concepts.html @@ -0,0 +1,47 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Iterator Requirements</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../concepts.html" title="Concepts"> +<link rel="prev" href="traits_concept.html" title="Traits Class Requirements"> +<link rel="next" href="../deprecated_interfaces.html" title="Deprecated Interfaces"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="traits_concept.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.concepts.iterator_concepts"></a><a class="link" href="iterator_concepts.html" title="Iterator Requirements">Iterator + Requirements</a> +</h4></div></div></div> +<p> + The regular expression algorithms (and iterators) take all require a Bidirectional-Iterator. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="traits_concept.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/concepts/traits_concept.html b/libs/regex/doc/html/boost_regex/ref/concepts/traits_concept.html new file mode 100644 index 0000000000..b6d0408738 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/concepts/traits_concept.html @@ -0,0 +1,591 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Traits Class Requirements</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../concepts.html" title="Concepts"> +<link rel="prev" href="charT_concept.html" title="charT Requirements"> +<link rel="next" href="iterator_concepts.html" title="Iterator Requirements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="charT_concept.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="iterator_concepts.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.concepts.traits_concept"></a><a class="link" href="traits_concept.html" title="Traits Class Requirements">Traits Class + Requirements</a> +</h4></div></div></div> +<p> + There are two sets of requirements for the <code class="computeroutput"><span class="identifier">traits</span></code> + template argument to <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>: a mininal interface + (which is part of the regex standardization proposal), and an optional + Boost-specific enhanced interface. + </p> +<h5> +<a name="boost_regex.ref.concepts.traits_concept.h0"></a> + <span><a name="boost_regex.ref.concepts.traits_concept.minimal_requirements_"></a></span><a class="link" href="traits_concept.html#boost_regex.ref.concepts.traits_concept.minimal_requirements_">Minimal + requirements.</a> + </h5> +<p> + In the following table <code class="computeroutput"><span class="identifier">X</span></code> + denotes a traits class defining types and functions for the character container + type <code class="computeroutput"><span class="identifier">charT</span></code>; <span class="emphasis"><em>u</em></span> + is an object of type <code class="computeroutput"><span class="identifier">X</span></code>; + <span class="emphasis"><em>v</em></span> is an object of type <code class="computeroutput"><span class="keyword">const</span> + <span class="identifier">X</span></code>; <span class="emphasis"><em>p</em></span> is + a value of type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span></code>; <span class="emphasis"><em>I1</em></span> and <span class="emphasis"><em>I2</em></span> + are Input Iterators; <span class="emphasis"><em>c</em></span> is a value of type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">charT</span></code>; + <span class="emphasis"><em>s</em></span> is an object of type <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">string_type</span></code>; + <span class="emphasis"><em>cs</em></span> is an object of type <code class="computeroutput"><span class="keyword">const</span> + <span class="identifier">X</span><span class="special">::</span><span class="identifier">string_type</span></code>; <span class="emphasis"><em>b</em></span> is + a value of type <code class="computeroutput"><span class="keyword">bool</span></code>; <span class="emphasis"><em>I</em></span> + is a value of type <code class="computeroutput"><span class="keyword">int</span></code>; <span class="emphasis"><em>F1</em></span> + and <span class="emphasis"><em>F2</em></span> are values of type <code class="computeroutput"><span class="keyword">const</span> + <span class="identifier">charT</span><span class="special">*</span></code>; + and <span class="emphasis"><em>loc</em></span> is an object of type <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">locale_type</span></code>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Return type + </p> + </th> +<th> + <p> + Assertion / Note Pre / Post condition + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + X::char_type + </p> + </td> +<td> + <p> + charT + </p> + </td> +<td> + <p> + The character container type used in the implementation of class + template basic_regex. + </p> + </td> +</tr> +<tr> +<td> + <p> + X::size_type + </p> + </td> +<td> + </td> +<td> + <p> + An unsigned integer type, capable of holding the length of a + null-terminated string of charT's. + </p> + </td> +</tr> +<tr> +<td> + <p> + X::string_type + </p> + </td> +<td> + <p> + std::basic_string<charT> or std::vector<charT> + </p> + </td> +<td> + </td> +</tr> +<tr> +<td> + <p> + X::locale_type + </p> + </td> +<td> + <p> + Implementation defined + </p> + </td> +<td> + <p> + A copy constructible type that represents the locale used by + the traits class. + </p> + </td> +</tr> +<tr> +<td> + <p> + X::char_class_type + </p> + </td> +<td> + <p> + Implementation defined + </p> + </td> +<td> + <p> + A bitmask type representing a particular character classification. + Multiple values of this type can be bitwise-or'ed together to + obtain a new valid value. + </p> + </td> +</tr> +<tr> +<td> + <p> + X::length(p) + </p> + </td> +<td> + <p> + X::size_type + </p> + </td> +<td> + <p> + Yields the smallest i such that p[i] == 0. Complexity is linear + in i. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.translate(c) + </p> + </td> +<td> + <p> + X::char_type + </p> + </td> +<td> + <p> + Returns a character such that for any character d that is to + be considered equivalent to c then v.translate(c) == v.translate(d). + </p> + </td> +</tr> +<tr> +<td> + <p> + v.translate_nocase(c) + </p> + </td> +<td> + <p> + X::char_type + </p> + </td> +<td> + <p> + For all characters C that are to be considered equivalent to + c when comparisons are to be performed without regard to case, + then v.translate_nocase(c) == v.translate_nocase(C). + </p> + </td> +</tr> +<tr> +<td> + <p> + v.transform(F1, F2) + </p> + </td> +<td> + <p> + X::string_type + </p> + </td> +<td> + <p> + Returns a sort key for the character sequence designated by the + iterator range [F1, F2) such that if the character sequence [G1, + G2) sorts before the character sequence [H1, H2) then v.transform(G1, + G2) < v.transform(H1, H2). + </p> + </td> +</tr> +<tr> +<td> + <p> + v.transform_primary(F1, F2) + </p> + </td> +<td> + <p> + X::string_type + </p> + </td> +<td> + <p> + Returns a sort key for the character sequence designated by the + iterator range [F1, F2) such that if the character sequence [G1, + G2) sorts before the character sequence [H1, H2) when character + case is not considered then v.transform_primary(G1, G2) < + v.transform_primary(H1, H2). + </p> + </td> +</tr> +<tr> +<td> + <p> + v.lookup_classname(F1, F2) + </p> + </td> +<td> + <p> + X::char_class_type + </p> + </td> +<td> + <p> + Converts the character sequence designated by the iterator range + [F1,F2) into a bitmask type that can subsequently be passed to + isctype. Values returned from lookup_classname can be safely + bitwise or'ed together. Returns 0 if the character sequence is + not the name of a character class recognized by X. The value + returned shall be independent of the case of the characters in + the sequence. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.lookup_collatename(F1, F2) + </p> + </td> +<td> + <p> + X::string_type + </p> + </td> +<td> + <p> + Returns a sequence of characters that represents the collating + element consisting of the character sequence designated by the + iterator range [F1, F2). Returns an empty string if the character + sequence is not a valid collating element. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.isctype(c, v.lookup_classname (F1, F2)) + </p> + </td> +<td> + <p> + bool + </p> + </td> +<td> + <p> + Returns true if character c is a member of the character class + designated by the iterator range [F1, F2), false otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.value(c, I) + </p> + </td> +<td> + <p> + int + </p> + </td> +<td> + <p> + Returns the value represented by the digit c in base I if the + character c is a valid digit in base I; otherwise returns -1. + [Note: the value of I will only be 8, 10, or 16. -end note] + </p> + </td> +</tr> +<tr> +<td> + <p> + u.imbue(loc) + </p> + </td> +<td> + <p> + X::locale_type + </p> + </td> +<td> + <p> + Imbues u with the locale loc, returns the previous locale used + by u if any. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.getloc() + </p> + </td> +<td> + <p> + X::locale_type + </p> + </td> +<td> + <p> + Returns the current locale used by v if any. + </p> + </td> +</tr> +</tbody> +</table></div> +<h5> +<a name="boost_regex.ref.concepts.traits_concept.h1"></a> + <span><a name="boost_regex.ref.concepts.traits_concept.additional_optional_requirements"></a></span><a class="link" href="traits_concept.html#boost_regex.ref.concepts.traits_concept.additional_optional_requirements">Additional + Optional Requirements</a> + </h5> +<p> + The following additional requirements are strictly optional, however in + order for <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> + to take advantage of these additional interfaces, all of the following + requirements must be met; <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> will detect the presence + or absense of the member <code class="computeroutput"><span class="identifier">boost_extensions_tag</span></code> + and configure itself appropriately. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Result + </p> + </th> +<th> + <p> + Assertion / Note Pre / Post condition + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + X::boost_extensions_tag + </p> + </td> +<td> + <p> + An unspecified type. + </p> + </td> +<td> + <p> + When present, all of the extensions listed in this table must + be present. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.syntax_type(c) + </p> + </td> +<td> + <p> + regex_constants::syntax_type + </p> + </td> +<td> + <p> + Returns a symbolic value of type regex_constants::syntax_type + that signifies the meaning of character c within the regular + expression grammar. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.escape_syntax_type(c) + </p> + </td> +<td> + <p> + regex_constants::escape_syntax_type + </p> + </td> +<td> + <p> + Returns a symbolic value of type regex_constants::escape_syntax_type, + that signifies the meaning of character c within the regular + expression grammar, when c has been preceded by an escape character. + Precondition: if b is the character preceding c in the expression + being parsed then: <code class="computeroutput"><span class="identifier">v</span><span class="special">.</span><span class="identifier">syntax_type</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> + <span class="identifier">syntax_escape</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + v.translate(c, b) + </p> + </td> +<td> + <p> + X::char_type + </p> + </td> +<td> + <p> + Returns a character d such that: for any character d that is + to be considered equivalent to c then <code class="computeroutput"><span class="identifier">v</span><span class="special">.</span><span class="identifier">translate</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span><span class="keyword">false</span><span class="special">)==</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">translate</span><span class="special">(</span><span class="identifier">d</span><span class="special">,</span><span class="keyword">false</span><span class="special">)</span></code>. Likewise for all characters + C that are to be considered equivalent to c when comparisons + are to be performed without regard to case, then <code class="computeroutput"><span class="identifier">v</span><span class="special">.</span><span class="identifier">translate</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span><span class="keyword">true</span><span class="special">)==</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">translate</span><span class="special">(</span><span class="identifier">C</span><span class="special">,</span><span class="keyword">true</span><span class="special">)</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.toi(I1, I2, i) + </p> + </td> +<td> + <p> + An integer type capable of holding either a charT or an int. + </p> + </td> +<td> + <p> + Behaves as follows: if <code class="computeroutput"><span class="identifier">p</span> + <span class="special">==</span> <span class="identifier">q</span></code> + or if <code class="computeroutput"><span class="special">*</span><span class="identifier">p</span></code> + is not a digit character then returns -1. Otherwise performs + formatted numeric input on the sequence [p,q) and returns the + result as an int. Postcondition: either p == q or *p is a non-digit + character. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.error_string(I) + </p> + </td> +<td> + <p> + std::string + </p> + </td> +<td> + <p> + Returns a human readable error string for the error condition + i, where i is one of the values enumerated by type regex_constants::error_type. + If the value <span class="emphasis"><em>I</em></span> is not recognized then returns + the string "Unknown error" or a localized equivalent. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.tolower(c) + </p> + </td> +<td> + <p> + X::char_type + </p> + </td> +<td> + <p> + Converts c to lower case, used for Perl-style \l and \L formating + operations. + </p> + </td> +</tr> +<tr> +<td> + <p> + v.toupper(c) + </p> + </td> +<td> + <p> + X::char_type + </p> + </td> +<td> + <p> + Converts c to upper case, used for Perl-style \u and \U formating + operations. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="charT_concept.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="iterator_concepts.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces.html b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces.html new file mode 100644 index 0000000000..ca89754d5d --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces.html @@ -0,0 +1,53 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Deprecated Interfaces</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="concepts/iterator_concepts.html" title="Iterator Requirements"> +<link rel="next" href="deprecated_interfaces/regex_format.html" title="regex_format (Deprecated)"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="concepts/iterator_concepts.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="deprecated_interfaces/regex_format.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.deprecated_interfaces"></a><a class="link" href="deprecated_interfaces.html" title="Deprecated Interfaces">Deprecated Interfaces</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="deprecated_interfaces/regex_format.html">regex_format + (Deprecated)</a></span></dt> +<dt><span class="section"><a href="deprecated_interfaces/regex_grep.html">regex_grep + (Deprecated)</a></span></dt> +<dt><span class="section"><a href="deprecated_interfaces/regex_split.html">regex_split + (deprecated)</a></span></dt> +<dt><span class="section"><a href="deprecated_interfaces/old_regex.html">High + Level Class RegEx (Deprecated)</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="concepts/iterator_concepts.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="deprecated_interfaces/regex_format.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/old_regex.html b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/old_regex.html new file mode 100644 index 0000000000..bcf736d958 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/old_regex.html @@ -0,0 +1,833 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>High Level Class RegEx (Deprecated)</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../deprecated_interfaces.html" title="Deprecated Interfaces"> +<link rel="prev" href="regex_split.html" title="regex_split (deprecated)"> +<link rel="next" href="../internal_details.html" title="Internal Details"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_split.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../internal_details.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.deprecated_interfaces.old_regex"></a><a class="link" href="old_regex.html" title="High Level Class RegEx (Deprecated)">High + Level Class RegEx (Deprecated)</a> +</h4></div></div></div> +<p> + The high level wrapper class RegEx is now deprecated and does not form + part of the regular expression standardization proposal. This type still + exists, and existing code will continue to compile, however the following + documentation is unlikely to be further updated. + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cregex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The class RegEx provides a high level simplified interface to the regular + expression library, this class only handles narrow character strings, and + regular expressions always follow the "normal" syntax - that + is the same as the perl / ECMAScript synatx. + </p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="special">(*</span><span class="identifier">GrepCallback</span><span class="special">)(</span><span class="keyword">const</span> <span class="identifier">RegEx</span><span class="special">&</span> <span class="identifier">expression</span><span class="special">);</span> +<span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="special">(*</span><span class="identifier">GrepFileCallback</span><span class="special">)(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">file</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">RegEx</span><span class="special">&</span> <span class="identifier">expression</span><span class="special">);</span> +<span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="special">(*</span><span class="identifier">FindFilesCallback</span><span class="special">)(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">file</span><span class="special">);</span> + +<span class="keyword">class</span> <span class="identifier">RegEx</span> +<span class="special">{</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="identifier">RegEx</span><span class="special">();</span> + <span class="identifier">RegEx</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">RegEx</span><span class="special">&</span> <span class="identifier">o</span><span class="special">);</span> + <span class="special">~</span><span class="identifier">RegEx</span><span class="special">();</span> + <span class="identifier">RegEx</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">c</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">icase</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">);</span> + <span class="keyword">explicit</span> <span class="identifier">RegEx</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">icase</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">);</span> + <span class="identifier">RegEx</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">RegEx</span><span class="special">&</span> <span class="identifier">o</span><span class="special">);</span> + <span class="identifier">RegEx</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">);</span> + <span class="identifier">RegEx</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">SetExpression</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">icase</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">SetExpression</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">icase</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">Expression</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// now matching operators: </span> + <span class="comment">// </span> + <span class="keyword">bool</span> <span class="identifier">Match</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">bool</span> <span class="identifier">Match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">bool</span> <span class="identifier">Search</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">bool</span> <span class="identifier">Search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">GrepCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">GrepCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">unsigned</span> <span class="keyword">int</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">unsigned</span> <span class="keyword">int</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">GrepFiles</span><span class="special">(</span><span class="identifier">GrepFileCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">files</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">recurse</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">GrepFiles</span><span class="special">(</span><span class="identifier">GrepFileCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">files</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">recurse</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">FindFiles</span><span class="special">(</span><span class="identifier">FindFilesCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">files</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">recurse</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">FindFiles</span><span class="special">(</span><span class="identifier">FindFilesCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">files</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">recurse</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">Merge</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">in</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">copy</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">Merge</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">in</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">fmt</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">copy</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="identifier">Split</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">,</span> + <span class="keyword">unsigned</span> <span class="identifier">max_count</span> <span class="special">=</span> <span class="special">~</span><span class="number">0</span><span class="special">);</span> + <span class="comment">// </span> + <span class="comment">// now operators for returning what matched in more detail: </span> + <span class="comment">// </span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Position</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Length</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">bool</span> <span class="identifier">Matched</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Line</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">Marks</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">What</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">operator</span><span class="special">[](</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span><span class="keyword">const</span> <span class="special">;</span> + + <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">npos</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + Member functions for class RegEx are defined as follows: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Member + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">();</span></code> + </p> + </td> +<td> + <p> + Default constructor, constructs an instance of RegEx without + any valid expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">RegEx</span><span class="special">&</span> <span class="identifier">o</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Copy constructor, all the properties of parameter <span class="emphasis"><em>o</em></span> + are copied. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">c</span><span class="special">,</span> <span class="keyword">bool</span> + <span class="identifier">icase</span> <span class="special">=</span> + <span class="keyword">false</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Constructs an instance of RegEx, setting the expression to <span class="emphasis"><em>c</em></span>, + if <span class="emphasis"><em>icase</em></span> is true then matching is insensitive + to case, otherwise it is sensitive to case. Throws <a class="link" href="../bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> on failure. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="keyword">bool</span> + <span class="identifier">icase</span> <span class="special">=</span> + <span class="keyword">false</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Constructs an instance of RegEx, setting the expression to <span class="emphasis"><em>s</em></span>, + if <span class="emphasis"><em>icase</em></span> is true then matching is insensitive + to case, otherwise it is sensitive to case. Throws <a class="link" href="../bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> on failure. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">&</span> + <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">RegEx</span><span class="special">&</span> <span class="identifier">o</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Default assignment operator. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">&</span> + <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Assignment operator, equivalent to calling <code class="computeroutput"><span class="identifier">SetExpression</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="keyword">false</span><span class="special">)</span></code>. Throws <a class="link" href="../bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> on failure. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">&</span> + <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Assignment operator, equivalent to calling <code class="computeroutput"><span class="identifier">SetExpression</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="keyword">false</span><span class="special">)</span></code>. Throws <a class="link" href="../bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> on failure. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">SetExpression</span><span class="special">(</span><span class="identifier">constchar</span><span class="special">*</span> + <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">icase</span> + <span class="special">=</span> <span class="keyword">false</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Sets the current expression to <span class="emphasis"><em>p</em></span>, if <span class="emphasis"><em>icase</em></span> + is true then matching is insensitive to case, otherwise it is + sensitive to case. Throws <a class="link" href="../bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> on failure. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">SetExpression</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="keyword">bool</span> + <span class="identifier">icase</span> <span class="special">=</span> + <span class="keyword">false</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Sets the current expression to <span class="emphasis"><em>s</em></span>, if <span class="emphasis"><em>icase</em></span> + is true then matching is insensitive to case, otherwise it is + sensitive to case. Throws <a class="link" href="../bad_expression.html" title="bad_expression"><code class="computeroutput"><span class="identifier">bad_expression</span></code></a> on failure. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">Expression</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Returns a copy of the current regular expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">Match</span><span class="special">(</span><span class="keyword">const</span> + <span class="keyword">char</span><span class="special">*</span> + <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Attempts to match the current expression against the text <span class="emphasis"><em>p</em></span> + using the match flags <span class="emphasis"><em>flags</em></span> - see <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>. + Returns <span class="emphasis"><em>true</em></span> if the expression matches the + whole of the input string. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">Match</span><span class="special">(</span><span class="keyword">const</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> + <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Attempts to match the current expression against the text <span class="emphasis"><em>s</em></span> + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + Returns <span class="emphasis"><em>true</em></span> if the expression matches the + whole of the input string. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">Search</span><span class="special">(</span><span class="keyword">const</span> + <span class="keyword">char</span><span class="special">*</span> + <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Attempts to find a match for the current expression somewhere + in the text <span class="emphasis"><em>p</em></span> using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + Returns <span class="emphasis"><em>true</em></span> if the match succeeds. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">Search</span><span class="special">(</span><span class="keyword">const</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> + <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Attempts to find a match for the current expression somewhere + in the text <span class="emphasis"><em>s</em></span> using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> flags. + Returns <span class="emphasis"><em>true</em></span> if the match succeeds. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">GrepCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> + <span class="keyword">char</span><span class="special">*</span> + <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Finds all matches of the current expression in the text <span class="emphasis"><em>p</em></span> + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + For each match found calls the call-back function cb as: <code class="computeroutput"><span class="identifier">cb</span><span class="special">(*</span><span class="keyword">this</span><span class="special">);</span></code> + If at any stage the call-back function returns <span class="emphasis"><em>false</em></span> + then the grep operation terminates, otherwise continues until + no further matches are found. Returns the number of matches found. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">GrepCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> + <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Finds all matches of the current expression in the text <span class="emphasis"><em>s</em></span> + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> flags. + For each match found calls the call-back function cb as: <code class="computeroutput"><span class="identifier">cb</span><span class="special">(*</span><span class="keyword">this</span><span class="special">);</span></code> + If at any stage the call-back function returns false then the + grep operation terminates, otherwise continues until no further + matches are found. Returns the number of matches found. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>&</span> + <span class="identifier">v</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> + <span class="identifier">flags</span> <span class="special">=</span> + <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Finds all matches of the current expression in the text <span class="emphasis"><em>p</em></span> + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> flags. + For each match pushes a copy of what matched onto <span class="emphasis"><em>v</em></span>. + Returns the number of matches found. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>&</span> + <span class="identifier">v</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> + <span class="identifier">flags</span> <span class="special">=</span> + <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Finds all matches of the current expression in the text <span class="emphasis"><em>s</em></span> + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + For each match pushes a copy of what matched onto <span class="emphasis"><em>v</em></span>. + Returns the number of matches found. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">unsigned</span> <span class="keyword">int</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">,</span> <span class="keyword">const</span> + <span class="keyword">char</span><span class="special">*</span> + <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Finds all matches of the current expression in the text <span class="emphasis"><em>p</em></span> + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + For each match pushes the starting index of what matched onto + <span class="emphasis"><em>v</em></span>. Returns the number of matches found. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">unsigned</span> <span class="keyword">int</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">,</span> <span class="keyword">const</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> + <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Finds all matches of the current expression in the text <span class="emphasis"><em>s</em></span> + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + For each match pushes the starting index of what matched onto + <span class="emphasis"><em>v</em></span>. Returns the number of matches found. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">GrepFiles</span><span class="special">(</span><span class="identifier">GrepFileCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> + <span class="keyword">char</span><span class="special">*</span> + <span class="identifier">files</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">recurse</span> + <span class="special">=</span> <span class="keyword">false</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> + <span class="identifier">flags</span> <span class="special">=</span> + <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Finds all matches of the current expression in the files files + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + For each match calls the call-back function cb. If the call-back + returns false then the algorithm returns without considering + further matches in the current file, or any further files. + </p> + <p> + The parameter <span class="emphasis"><em>files</em></span> can include wild card + characters '*' and '?', if the parameter recurse is true then + searches sub-directories for matching file names. + </p> + <p> + Returns the total number of matches found. + </p> + <p> + May throw an exception derived from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if file io fails. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">GrepFiles</span><span class="special">(</span><span class="identifier">GrepFileCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> + <span class="identifier">files</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">recurse</span> + <span class="special">=</span> <span class="keyword">false</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> + <span class="identifier">flags</span> <span class="special">=</span> + <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Finds all matches of the current expression in the files files + using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + For each match calls the call-back function cb. + </p> + <p> + If the call-back returns false then the algorithm returns without + considering further matches in the current file, or any further + files. + </p> + <p> + The parameter <span class="emphasis"><em>files</em></span> can include wild card + characters '*' and '?', if the parameter recurse is true then + searches sub-directories for matching file names. + </p> + <p> + Returns the total number of matches found. + </p> + <p> + May throw an exception derived from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if file io fails. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">FindFiles</span><span class="special">(</span><span class="identifier">FindFilesCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> + <span class="keyword">char</span><span class="special">*</span> + <span class="identifier">files</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">recurse</span> + <span class="special">=</span> <span class="keyword">false</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> + <span class="identifier">flags</span> <span class="special">=</span> + <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Searches files to find all those which contain at least one match + of the current expression using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + For each matching file calls the call-back function cb. If the + call-back returns false then the algorithm returns without considering + any further files. + </p> + <p> + The parameter <span class="emphasis"><em>files</em></span> can include wild card + characters '*' and '?', if the parameter <span class="emphasis"><em>recurse</em></span> + is true then searches sub-directories for matching file names. + </p> + <p> + Returns the total number of files found. + </p> + <p> + May throw an exception derived from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if file io fails. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">FindFiles</span><span class="special">(</span><span class="identifier">FindFilesCallback</span> <span class="identifier">cb</span><span class="special">,</span> <span class="keyword">const</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> + <span class="identifier">files</span><span class="special">,</span> + <span class="keyword">bool</span> <span class="identifier">recurse</span> + <span class="special">=</span> <span class="keyword">false</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> + <span class="identifier">flags</span> <span class="special">=</span> + <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Searches files to find all those which contain at least one match + of the current expression using the <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>flags</em></span>. + For each matching file calls the call-back function cb. + </p> + <p> + If the call-back returns false then the algorithm returns without + considering any further files. + </p> + <p> + The parameter <span class="emphasis"><em>files</em></span> can include wild card + characters '*' and '?', if the parameter <span class="emphasis"><em>recurse</em></span> + is true then searches sub-directories for matching file names. + </p> + <p> + Returns the total number of files found. + </p> + <p> + May throw an exception derived from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if file io fails. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">Merge</span><span class="special">(</span><span class="keyword">const</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> + <span class="identifier">in</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">fmt</span><span class="special">,</span> <span class="keyword">bool</span> + <span class="identifier">copy</span> <span class="special">=</span> + <span class="keyword">true</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Performs a search and replace operation: searches through the + string <span class="emphasis"><em>in</em></span> for all occurrences of the current + expression, for each occurrence replaces the match with the format + string <span class="emphasis"><em>fmt</em></span>. Uses <span class="emphasis"><em>flags</em></span> + to determine what gets matched, and how the format string should + be treated. If <span class="emphasis"><em>copy</em></span> is true then all unmatched + sections of input are copied unchanged to output, if the flag + <span class="emphasis"><em>format_first_only</em></span> is set then only the first + occurance of the pattern found is replaced. Returns the new string. + See also <a class="link" href="../../format.html" title="Search and Replace Format String Syntax">format string syntax</a>, + and <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">Merge</span><span class="special">(</span><span class="keyword">const</span> + <span class="keyword">char</span><span class="special">*</span> + <span class="identifier">in</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">fmt</span><span class="special">,</span> <span class="keyword">bool</span> + <span class="identifier">copy</span> <span class="special">=</span> + <span class="keyword">true</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> + <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Performs a search and replace operation: searches through the + string <span class="emphasis"><em>in</em></span> for all occurrences of the current + expression, for each occurrence replaces the match with the format + string <span class="emphasis"><em>fmt</em></span>. Uses <span class="emphasis"><em>flags</em></span> + to determine what gets matched, and how the format string should + be treated. If <span class="emphasis"><em>copy</em></span> is true then all unmatched + sections of input are copied unchanged to output, if the flag + <span class="emphasis"><em>format_first_only</em></span> is set then only the first + occurance of the pattern found is replaced. Returns the new string. + See also <a class="link" href="../../format.html" title="Search and Replace Format String Syntax">format string syntax</a>, + and <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="identifier">Split</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> + <span class="identifier">flags</span> <span class="special">=</span> + <span class="identifier">match_default</span><span class="special">,</span> + <span class="keyword">unsigned</span> <span class="identifier">max_count</span> + <span class="special">=</span> <span class="special">~</span><span class="number">0</span><span class="special">);</span></code> + </p> + </td> +<td> + <p> + Splits the input string and pushes each one onto the vector. + If the expression contains no marked sub-expressions, then one + string is outputted for each section of the input that does not + match the expression. If the expression does contain marked sub-expressions, + then outputs one string for each marked sub-expression each time + a match occurs. Outputs no more than <span class="emphasis"><em>max_count</em></span> + strings. Before returning, deletes from the input string <span class="emphasis"><em>s</em></span> + all of the input that has been processed (all of the string if + <span class="emphasis"><em>max_count</em></span> was not reached). Returns the + number of strings pushed onto the vector. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Position</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> + <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Returns the position of what matched sub-expression <span class="emphasis"><em>i</em></span>. + If <code class="computeroutput"><span class="identifier">i</span> <span class="special">=</span> + <span class="number">0</span></code> then returns the position + of the whole match. Returns <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">::</span><span class="identifier">npos</span></code> + if the supplied index is invalid, or if the specified sub-expression + did not participate in the match. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Length</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> + <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Returns the length of what matched sub-expression i. If <code class="computeroutput"><span class="identifier">i</span> <span class="special">=</span> + <span class="number">0</span></code> then returns the length + of the whole match. Returns <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">::</span><span class="identifier">npos</span></code> + if the supplied index is invalid, or if the specified sub-expression + did not participate in the match. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">Matched</span><span class="special">(</span><span class="keyword">int</span> + <span class="identifier">i</span> <span class="special">=</span> + <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Returns true if sub-expression <span class="emphasis"><em>i</em></span> was matched, + false otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Line</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Returns the line on which the match occurred, indexes start from + 1 not zero, if no match occurred then returns <code class="computeroutput"><span class="identifier">RegEx</span><span class="special">::</span><span class="identifier">npos</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">Marks</span><span class="special">()</span> + <span class="keyword">const</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Returns the number of marked sub-expressions contained in the + expression. Note that this includes the whole match (sub-expression + zero), so the value returned is always >= 1. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">What</span><span class="special">(</span><span class="keyword">int</span> + <span class="identifier">i</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Returns a copy of what matched sub-expression <span class="emphasis"><em>i</em></span>. + If <code class="computeroutput"><span class="identifier">i</span> <span class="special">=</span> + <span class="number">0</span></code> then returns a copy of + the whole match. Returns a null string if the index is invalid + or if the specified sub-expression did not participate in a match. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">operator</span><span class="special">[](</span><span class="keyword">int</span> + <span class="identifier">i</span><span class="special">)</span><span class="keyword">const</span> <span class="special">;</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="identifier">what</span><span class="special">(</span><span class="identifier">i</span><span class="special">);</span></code> Can be used to simplify access + to sub-expression matches, and make usage more perl-like. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_split.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../internal_details.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html new file mode 100644 index 0000000000..537dbb9cda --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html @@ -0,0 +1,173 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_format (Deprecated)</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../deprecated_interfaces.html" title="Deprecated Interfaces"> +<link rel="prev" href="../deprecated_interfaces.html" title="Deprecated Interfaces"> +<link rel="next" href="regex_grep.html" title="regex_grep (Deprecated)"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_grep.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.deprecated_interfaces.regex_format"></a><a class="link" href="regex_format.html" title="regex_format (Deprecated)">regex_format + (Deprecated)</a> +</h4></div></div></div> +<p> + The algorithm <code class="computeroutput"><span class="identifier">regex_format</span></code> + is deprecated; new code should use <a class="link" href="../match_results.html#boost_regex.match_results_format"><code class="computeroutput"><span class="identifier">match_results</span><span class="special"><>::</span><span class="identifier">format</span></code></a> instead. Existing code + will continue to compile, the following documentation is taken from the + previous version of Boost.Regex and will not be further updated: + </p> +<h5> +<a name="boost_regex.ref.deprecated_interfaces.regex_format.h0"></a> + <span><a name="boost_regex.ref.deprecated_interfaces.regex_format.algorithm_regex_format"></a></span><a class="link" href="regex_format.html#boost_regex.ref.deprecated_interfaces.regex_format.algorithm_regex_format">Algorithm + regex_format</a> + </h5> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The algorithm <code class="computeroutput"><span class="identifier">regex_format</span></code> + takes the results of a match and creates a new string based upon a format + string, <code class="computeroutput"><span class="identifier">regex_format</span></code> can + be used for search and replace operations: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">iterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> +<span class="identifier">OutputIterator</span> <span class="identifier">regex_format</span><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span> +</pre> +<p> + The library also defines the following convenience variation of <code class="computeroutput"><span class="identifier">regex_format</span></code>, which returns the result + directly as a string, rather than outputting to an iterator. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + This version may not be available, or may be available in a more limited + form, depending upon your compilers capabilities + </p></td></tr> +</table></div> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">iterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="identifier">regex_format</span> + <span class="special">(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span> +</pre> +<p> + Parameters to the main version of the function are passed as follows: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">OutputIterator</span> <span class="identifier">out</span></code> + </p> + </td> +<td> + <p> + An output iterator type, the output string is sent to this iterator. + Typically this would be a std::ostream_iterator. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span></code> + </p> + </td> +<td> + <p> + An instance of <a class="link" href="../match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> obtained + from one of the matching algorithms above, and denoting what + matched. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Formatter</span> <span class="identifier">fmt</span></code> + </p> + </td> +<td> + <p> + Either a format string that determines how the match is transformed + into the new string, or a functor that computes the new string + from <span class="emphasis"><em>m</em></span> - see <a class="link" href="../match_results.html#boost_regex.match_results_format"><code class="computeroutput"><span class="identifier">match_results</span><span class="special"><>::</span><span class="identifier">format</span></code></a>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="identifier">flags</span></code> + </p> + </td> +<td> + <p> + Optional flags which describe how the format string is to be + interpreted. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Format flags are described under <a class="link" href="../match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>. + </p> +<p> + The format string syntax (and available options) is described more fully + under <a class="link" href="../../format.html" title="Search and Replace Format String Syntax">format strings</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_grep.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_grep.html b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_grep.html new file mode 100644 index 0000000000..c04118086f --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_grep.html @@ -0,0 +1,376 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_grep (Deprecated)</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../deprecated_interfaces.html" title="Deprecated Interfaces"> +<link rel="prev" href="regex_format.html" title="regex_format (Deprecated)"> +<link rel="next" href="regex_split.html" title="regex_split (deprecated)"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_format.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_split.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.deprecated_interfaces.regex_grep"></a><a class="link" href="regex_grep.html" title="regex_grep (Deprecated)">regex_grep + (Deprecated)</a> +</h4></div></div></div> +<p> + The algorithm <code class="computeroutput"><span class="identifier">regex_grep</span></code> + is deprecated in favor of <a class="link" href="../regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> which provides + a more convenient and standard library friendly interface. + </p> +<p> + The following documentation is taken unchanged from the previous boost + release, and will not be updated in future. + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">regex_grep</span></code> allows you to + search through a bidirectional-iterator range and locate all the (non-overlapping) + matches with a given regular expression. The function is declared as: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Predicate</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">iterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">regex_grep</span><span class="special">(</span><span class="identifier">Predicate</span> <span class="identifier">foo</span><span class="special">,</span> + <span class="identifier">iterator</span> <span class="identifier">first</span><span class="special">,</span> + <span class="identifier">iterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">)</span> +</pre> +<p> + The library also defines the following convenience versions, which take + either a <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span></code>, or a <code class="computeroutput"><span class="keyword">const</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><>&</span></code> + in place of a pair of iterators. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Predicate</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">regex_grep</span><span class="special">(</span><span class="identifier">Predicate</span> <span class="identifier">foo</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Predicate</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">regex_grep</span><span class="special">(</span><span class="identifier">Predicate</span> <span class="identifier">foo</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + The parameters for the primary version of <code class="computeroutput"><span class="identifier">regex_grep</span></code> + have the following meanings: + </p> +<p> + foo: A predicate function object or function pointer, see below for more + information. + </p> +<p> + first: The start of the range to search. + </p> +<p> + last: The end of the range to search. + </p> +<p> + e: The regular expression to search for. + </p> +<p> + flags: The flags that determine how matching is carried out, one of the + match_flags enumerators. + </p> +<p> + The algorithm finds all of the non-overlapping matches of the expression + <span class="emphasis"><em>e</em></span>, for each match it fills a <code class="computeroutput"><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">></span></code> structure, which contains information + on what matched, and calls the predicate <span class="emphasis"><em>foo</em></span>, passing + the <code class="computeroutput"><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">></span></code> + as a single argument. If the predicate returns <span class="emphasis"><em>true</em></span>, + then the grep operation continues, otherwise it terminates without searching + for further matches. The function returns the number of matches found. + </p> +<p> + The general form of the predicate is: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">grep_predicate</span> +<span class="special">{</span> + <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">iterator_type</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +<span class="special">};</span> +</pre> +<p> + For example the regular expression "a*b" would find one match + in the string "aaaaab" and two in the string "aaabb". + </p> +<p> + Remember this algorithm can be used for a lot more than implementing a + version of grep, the predicate can be and do anything that you want, grep + utilities would output the results to the screen, another program could + index a file based on a regular expression and store a set of bookmarks + in a list, or a text file conversion utility would output to file. The + results of one <code class="computeroutput"><span class="identifier">regex_grep</span></code> + can even be chained into another <code class="computeroutput"><span class="identifier">regex_grep</span></code> + to create recursive parsers. + </p> +<p> + The algorithm may throw <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an <span class="emphasis"><em>N</em></span> + character string begins to exceed O(N<sup>2</sup>), or if the program runs out of + stack space while matching the expression (if Boost.Regex is configured + in recursive mode), or if the matcher exhausts it's permitted memory allocation + (if Boost.Regex is configured in non-recursive mode). + </p> +<p> + Example: convert the example from <a class="link" href="../regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> to use <code class="computeroutput"><span class="identifier">regex_grep</span></code> instead: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">map</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="comment">// IndexClasses: </span> +<span class="comment">// takes the contents of a file in the form of a string </span> +<span class="comment">// and searches for all the C++ class definitions, storing </span> +<span class="comment">// their locations in a map of strings/int's </span> +<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">map_type</span><span class="special">;</span> + +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">re</span> <span class="special">=</span> + <span class="comment">// possibly leading whitespace: </span> + <span class="string">"^[[:space:]]*"</span> + <span class="comment">// possible template declaration:</span> + <span class="string">"(template[[:space:]]*<[^;:{]+>[[:space:]]*)?"</span> + <span class="comment">// class or struct:</span> + <span class="string">"(class|struct)[[:space:]]*"</span> + <span class="comment">// leading declspec macros etc:</span> + <span class="string">"("</span> + <span class="string">"\\<\\w+\\>"</span> + <span class="string">"("</span> + <span class="string">"[[:blank:]]*\\([^)]*\\)"</span> + <span class="string">")?"</span> + <span class="string">"[[:space:]]*"</span> + <span class="string">")*"</span> + <span class="comment">// the class name</span> + <span class="string">"(\\<\\w*\\>)[[:space:]]*"</span> + <span class="comment">// template specialisation parameters</span> + <span class="string">"(<[^;:{]+>)?[[:space:]]*"</span> + <span class="comment">// terminate in { or :</span> + <span class="string">"(\\{|:[^;\\{()]*\\{)"</span><span class="special">;</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">expression</span><span class="special">(</span><span class="identifier">re</span><span class="special">);</span> +<span class="keyword">class</span> <span class="identifier">IndexClassesPred</span> +<span class="special">{</span> + <span class="identifier">map_type</span><span class="special">&</span> <span class="identifier">m</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">base</span><span class="special">;</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="identifier">IndexClassesPred</span><span class="special">(</span><span class="identifier">map_type</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">m</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">base</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">{}</span> + <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">const</span> <span class="identifier">smatch</span><span class="special">&</span> <span class="identifier">what</span><span class="special">)</span> + <span class="special">{</span> + <span class="comment">// what[0] contains the whole string </span> + <span class="comment">// what[5] contains the class name. </span> + <span class="comment">// what[6] contains the template specialisation if any. </span> + <span class="comment">// add class name and position to map: </span> + <span class="identifier">m</span><span class="special">[</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">second</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">second</span><span class="special">)]</span> <span class="special">=</span> + <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span> <span class="special">-</span> <span class="identifier">base</span><span class="special">;</span> + <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">};</span> +<span class="keyword">void</span> <span class="identifier">IndexClasses</span><span class="special">(</span><span class="identifier">map_type</span><span class="special">&</span> <span class="identifier">m</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">file</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">start</span><span class="special">,</span> <span class="identifier">end</span><span class="special">;</span> + <span class="identifier">start</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> + <span class="identifier">end</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> + <span class="identifier">regex_grep</span><span class="special">(</span><span class="identifier">IndexClassesPred</span><span class="special">(</span><span class="identifier">m</span><span class="special">,</span> <span class="identifier">start</span><span class="special">),</span> <span class="identifier">start</span><span class="special">,</span> <span class="identifier">end</span><span class="special">,</span> <span class="identifier">expression</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Example: Use <code class="computeroutput"><span class="identifier">regex_grep</span></code> + to call a global callback function: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">map</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="comment">// purpose: </span> +<span class="comment">// takes the contents of a file in the form of a string </span> +<span class="comment">// and searches for all the C++ class definitions, storing </span> +<span class="comment">// their locations in a map of strings/int's </span> +<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">map_type</span><span class="special">;</span> + +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">re</span> <span class="special">=</span> + <span class="comment">// possibly leading whitespace: </span> + <span class="string">"^[[:space:]]*"</span> + <span class="comment">// possible template declaration:</span> + <span class="string">"(template[[:space:]]*<[^;:{]+>[[:space:]]*)?"</span> + <span class="comment">// class or struct:</span> + <span class="string">"(class|struct)[[:space:]]*"</span> + <span class="comment">// leading declspec macros etc:</span> + <span class="string">"("</span> + <span class="string">"\\<\\w+\\>"</span> + <span class="string">"("</span> + <span class="string">"[[:blank:]]*\\([^)]*\\)"</span> + <span class="string">")?"</span> + <span class="string">"[[:space:]]*"</span> + <span class="string">")*"</span> + <span class="comment">// the class name</span> + <span class="string">"(\\<\\w*\\>)[[:space:]]*"</span> + <span class="comment">// template specialisation parameters</span> + <span class="string">"(<[^;:{]+>)?[[:space:]]*"</span> + <span class="comment">// terminate in { or :</span> + <span class="string">"(\\{|:[^;\\{()]*\\{)"</span><span class="special">;</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">expression</span><span class="special">(</span><span class="identifier">re</span><span class="special">);</span> +<span class="identifier">map_type</span> <span class="identifier">class_index</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">base</span><span class="special">;</span> + +<span class="keyword">bool</span> <span class="identifier">grep_callback</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">smatch</span><span class="special">&</span> <span class="identifier">what</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// what[0] contains the whole string </span> + <span class="comment">// what[5] contains the class name. </span> + <span class="comment">// what[6] contains the template specialisation if any. </span> + <span class="comment">// add class name and position to map: </span> + <span class="identifier">class_index</span><span class="special">[</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">second</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">second</span><span class="special">)]</span> <span class="special">=</span> + <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span> <span class="special">-</span> <span class="identifier">base</span><span class="special">;</span> + <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span> +<span class="special">}</span> +<span class="keyword">void</span> <span class="identifier">IndexClasses</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">file</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">start</span><span class="special">,</span> <span class="identifier">end</span><span class="special">;</span> + <span class="identifier">start</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> + <span class="identifier">end</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> + <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">start</span><span class="special">;</span> + <span class="identifier">regex_grep</span><span class="special">(</span><span class="identifier">grep_callback</span><span class="special">,</span> <span class="identifier">start</span><span class="special">,</span> <span class="identifier">end</span><span class="special">,</span> <span class="identifier">expression</span><span class="special">,</span> <span class="identifier">match_default</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Example: use <code class="computeroutput"><span class="identifier">regex_grep</span></code> + to call a class member function, use the standard library adapters <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">mem_fun</span></code> and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind1st</span></code> + to convert the member function into a predicate: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">map</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">functional</span><span class="special">></span> +<span class="comment">// purpose: </span> +<span class="comment">// takes the contents of a file in the form of a string </span> +<span class="comment">// and searches for all the C++ class definitions, storing </span> +<span class="comment">// their locations in a map of strings/int's </span> + +<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">map_type</span><span class="special">;</span> +<span class="keyword">class</span> <span class="identifier">class_index</span> +<span class="special">{</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">expression</span><span class="special">;</span> + <span class="identifier">map_type</span> <span class="identifier">index</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">base</span><span class="special">;</span> + <span class="keyword">bool</span> <span class="identifier">grep_callback</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">smatch</span> <span class="identifier">what</span><span class="special">);</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="keyword">void</span> <span class="identifier">IndexClasses</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">file</span><span class="special">);</span> + <span class="identifier">class_index</span><span class="special">()</span> + <span class="special">:</span> <span class="identifier">index</span><span class="special">(),</span> + <span class="identifier">expression</span><span class="special">(</span><span class="string">"^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?"</span> + <span class="string">"(class|struct)[[:space:]]*(\\<\\w+\\>([[:blank:]]*\\([^)]*\\))?"</span> + <span class="string">"[[:space:]]*)*(\\<\\w*\\>)[[:space:]]*(<[^;:{]+>[[:space:]]*)?"</span> + <span class="string">"(\\{|:[^;\\{()]*\\{)"</span> + <span class="special">){}</span> +<span class="special">};</span> +<span class="keyword">bool</span> <span class="identifier">class_index</span><span class="special">::</span><span class="identifier">grep_callback</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">smatch</span> <span class="identifier">what</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// what[0] contains the whole string </span> + <span class="comment">// what[5] contains the class name. </span> + <span class="comment">// what[6] contains the template specialisation if any. </span> + <span class="comment">// add class name and position to map: </span> + <span class="identifier">index</span><span class="special">[</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">second</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">second</span><span class="special">)]</span> <span class="special">=</span> + <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span> <span class="special">-</span> <span class="identifier">base</span><span class="special">;</span> + <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span> +<span class="special">}</span> + +<span class="keyword">void</span> <span class="identifier">class_index</span><span class="special">::</span><span class="identifier">IndexClasses</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">file</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">start</span><span class="special">,</span> <span class="identifier">end</span><span class="special">;</span> + <span class="identifier">start</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> + <span class="identifier">end</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> + <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">start</span><span class="special">;</span> + <span class="identifier">regex_grep</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind1st</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">mem_fun</span><span class="special">(&</span><span class="identifier">class_index</span><span class="special">::</span><span class="identifier">grep_callback</span><span class="special">),</span> <span class="keyword">this</span><span class="special">),</span> + <span class="identifier">start</span><span class="special">,</span> + <span class="identifier">end</span><span class="special">,</span> + <span class="identifier">expression</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Finally, C++ Builder users can use C++ Builder's closure type as a callback + argument: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">map</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">functional</span><span class="special">></span> +<span class="comment">// purpose: </span> +<span class="comment">// takes the contents of a file in the form of a string </span> +<span class="comment">// and searches for all the C++ class definitions, storing </span> +<span class="comment">// their locations in a map of strings/int's </span> + +<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">map_type</span><span class="special">;</span> +<span class="keyword">class</span> <span class="identifier">class_index</span> +<span class="special">{</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">expression</span><span class="special">;</span> + <span class="identifier">map_type</span> <span class="identifier">index</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">base</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">smatch</span> <span class="identifier">arg_type</span><span class="special">;</span> + <span class="keyword">bool</span> <span class="identifier">grep_callback</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">arg_type</span><span class="special">&</span> <span class="identifier">what</span><span class="special">);</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="special">(</span><span class="identifier">__closure</span><span class="special">*</span> <span class="identifier">grep_callback_type</span><span class="special">)(</span><span class="keyword">const</span> <span class="identifier">arg_type</span><span class="special">&);</span> + <span class="keyword">void</span> <span class="identifier">IndexClasses</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">file</span><span class="special">);</span> + <span class="identifier">class_index</span><span class="special">()</span> + <span class="special">:</span> <span class="identifier">index</span><span class="special">(),</span> + <span class="identifier">expression</span><span class="special">(</span><span class="string">"^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?"</span> + <span class="string">"(class|struct)[[:space:]]*(\\<\\w+\\>([[:blank:]]*\\([^)]*\\))?"</span> + <span class="string">"[[:space:]]*)*(\\<\\w*\\>)[[:space:]]*(<[^;:{]+>[[:space:]]*)?"</span> + <span class="string">"(\\{|:[^;\\{()]*\\{)"</span> + <span class="special">){}</span> +<span class="special">};</span> + +<span class="keyword">bool</span> <span class="identifier">class_index</span><span class="special">::</span><span class="identifier">grep_callback</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">arg_type</span><span class="special">&</span> <span class="identifier">what</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// what[0] contains the whole string </span> +<span class="comment">// what[5] contains the class name. </span> +<span class="comment">// what[6] contains the template specialisation if any. </span> +<span class="comment">// add class name and position to map: </span> +<span class="identifier">index</span><span class="special">[</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">second</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">second</span><span class="special">)]</span> <span class="special">=</span> + <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span> <span class="special">-</span> <span class="identifier">base</span><span class="special">;</span> + <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span> +<span class="special">}</span> + +<span class="keyword">void</span> <span class="identifier">class_index</span><span class="special">::</span><span class="identifier">IndexClasses</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">file</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">start</span><span class="special">,</span> <span class="identifier">end</span><span class="special">;</span> + <span class="identifier">start</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> + <span class="identifier">end</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> + <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">start</span><span class="special">;</span> + <span class="identifier">class_index</span><span class="special">::</span><span class="identifier">grep_callback_type</span> <span class="identifier">cl</span> <span class="special">=</span> <span class="special">&(</span><span class="keyword">this</span><span class="special">-></span><span class="identifier">grep_callback</span><span class="special">);</span> + <span class="identifier">regex_grep</span><span class="special">(</span><span class="identifier">cl</span><span class="special">,</span> + <span class="identifier">start</span><span class="special">,</span> + <span class="identifier">end</span><span class="special">,</span> + <span class="identifier">expression</span><span class="special">);</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_format.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_split.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_split.html b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_split.html new file mode 100644 index 0000000000..c9b1a8cf57 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_split.html @@ -0,0 +1,163 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_split (deprecated)</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../deprecated_interfaces.html" title="Deprecated Interfaces"> +<link rel="prev" href="regex_grep.html" title="regex_grep (Deprecated)"> +<link rel="next" href="old_regex.html" title="High Level Class RegEx (Deprecated)"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_grep.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="old_regex.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.deprecated_interfaces.regex_split"></a><a class="link" href="regex_split.html" title="regex_split (deprecated)">regex_split + (deprecated)</a> +</h4></div></div></div> +<p> + The algorithm <a class="link" href="regex_split.html" title="regex_split (deprecated)"><code class="computeroutput"><span class="identifier">regex_split</span></code></a> has been deprecated + in favor of the iterator <a class="link" href="../regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> which has + a more flexible and powerful interface, as well as following the more usual + standard library "pull" rather than "push" semantics. + </p> +<p> + Code which uses <a class="link" href="regex_split.html" title="regex_split (deprecated)"><code class="computeroutput"><span class="identifier">regex_split</span></code></a> will continue to compile, + the following documentation is taken from a previous Boost.Regex version: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Algorithm <a class="link" href="regex_split.html" title="regex_split (deprecated)"><code class="computeroutput"><span class="identifier">regex_split</span></code></a> performs a similar + operation to the perl split operation, and comes in three overloaded forms: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits2</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">regex_split</span><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits1</span><span class="special">,</span> <span class="identifier">Alloc1</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits2</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span><span class="special">,</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">max_split</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits2</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">regex_split</span><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits1</span><span class="special">,</span> <span class="identifier">Alloc1</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits2</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc1</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">regex_split</span><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits1</span><span class="special">,</span> <span class="identifier">Alloc1</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Each version of the algorithm + takes an output-iterator for output, and a string for input. If the expression + contains no marked sub-expressions, then the algorithm writes one string + onto the output-iterator for each section of input that does not match + the expression. If the expression does contain marked sub-expressions, + then each time a match is found, one string for each marked sub-expression + will be written to the output-iterator. No more than max_split strings + will be written to the output-iterator. Before returning, all the input + processed will be deleted from the string <span class="emphasis"><em>s</em></span> (if <span class="emphasis"><em>max_split</em></span> + is not reached then all of <span class="emphasis"><em>s</em></span> will be deleted). Returns + the number of strings written to the output-iterator. If the parameter + <span class="emphasis"><em>max_split</em></span> is not specified then it defaults to <code class="computeroutput"><span class="identifier">UINT_MAX</span></code>. If no expression is specified, + then it defaults to "\s+", and splitting occurs on whitespace. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while + matching the expression (if Boost.Regex is configured in recursive mode), + or if the matcher exhausts its permitted memory allocation (if Boost.Regex + is configured in non-recursive mode). + </p> +<p> + <span class="bold"><strong>Example</strong></span>: the following function will split + the input string into a series of tokens, and remove each token from the + string <span class="emphasis"><em>s</em></span>: + </p> +<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">tokenise</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>&</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_split</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">back_inserter</span><span class="special">(</span><span class="identifier">l</span><span class="special">),</span> <span class="identifier">s</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Example: the following short program will extract all of the URL's from + a html file, and print them out to cout: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">list</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">fstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="string">"<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\""</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regbase</span><span class="special">::</span><span class="identifier">normal</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regbase</span><span class="special">::</span><span class="identifier">icase</span><span class="special">);</span> + +<span class="keyword">void</span> <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">erase</span><span class="special">();</span> + <span class="comment">//</span> + <span class="comment">// attempt to grow string buffer to match file size,</span> + <span class="comment">// this doesn't always work...</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">rdbuf</span><span class="special">()-&</span><span class="identifier">gtin_avail</span><span class="special">());</span> + <span class="keyword">char</span> <span class="identifier">c</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">c</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// use logarithmic growth stategy, in case</span> + <span class="comment">// in_avail (above) returned zero:</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">())</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">*</span> <span class="number">3</span><span class="special">);</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">append</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">}</span> + + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**</span> <span class="identifier">argv</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="identifier">l</span><span class="special">;</span> + + <span class="keyword">for</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">argc</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Findings URL's in "</span> <span class="special"><<</span> <span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special"><<</span> <span class="string">":"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">erase</span><span class="special">();</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ifstream</span> <span class="identifier">is</span><span class="special">(</span><span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span> + <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">is</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_split</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">back_inserter</span><span class="special">(</span><span class="identifier">l</span><span class="special">),</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">e</span><span class="special">);</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">l</span><span class="special">.</span><span class="identifier">size</span><span class="special">())</span> + <span class="special">{</span> + <span class="identifier">s</span> <span class="special">=</span> <span class="special">*(</span><span class="identifier">l</span><span class="special">.</span><span class="identifier">begin</span><span class="special">());</span> + <span class="identifier">l</span><span class="special">.</span><span class="identifier">pop_front</span><span class="special">();</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">s</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">}</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_grep.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../deprecated_interfaces.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="old_regex.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/error_type.html b/libs/regex/doc/html/boost_regex/ref/error_type.html new file mode 100644 index 0000000000..9e65d78e3c --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/error_type.html @@ -0,0 +1,271 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>error_type</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="match_flag_type.html" title="match_flag_type"> +<link rel="next" href="regex_traits.html" title="regex_traits"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="match_flag_type.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_traits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.error_type"></a><a class="link" href="error_type.html" title="error_type">error_type</a> +</h3></div></div></div> +<h5> +<a name="boost_regex.ref.error_type.h0"></a> + <span><a name="boost_regex.ref.error_type.synopsis"></a></span><a class="link" href="error_type.html#boost_regex.ref.error_type.synopsis">Synopsis</a> + </h5> +<p> + Type error type represents the different types of errors that can be raised + by the library when parsing a regular expression. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">regex_constants</span><span class="special">{</span> + +<span class="keyword">typedef</span> <span class="identifier">implementation</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">error_type</span><span class="special">;</span> + +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_collate</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_ctype</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_escape</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_backref</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_brack</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_paren</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_brace</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_badbrace</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_range</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_space</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_badrepeat</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_complexity</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_stack</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">error_type</span> <span class="identifier">error_bad_pattern</span><span class="special">;</span> + +<span class="special">}</span> <span class="comment">// namespace regex_constants</span> +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<h5> +<a name="boost_regex.ref.error_type.h1"></a> + <span><a name="boost_regex.ref.error_type.description"></a></span><a class="link" href="error_type.html#boost_regex.ref.error_type.description">Description</a> + </h5> +<p> + The type <code class="computeroutput"><span class="identifier">error_type</span></code> is an + implementation-specific enumeration type that may take one of the following + values: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Constant + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + error_collate + </p> + </td> +<td> + <p> + An invalid collating element was specified in a [[.name.]] block. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_ctype + </p> + </td> +<td> + <p> + An invalid character class name was specified in a [[:name:]] block. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_escape + </p> + </td> +<td> + <p> + An invalid or trailing escape was encountered. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_backref + </p> + </td> +<td> + <p> + A back-reference to a non-existant marked sub-expression was encountered. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_brack + </p> + </td> +<td> + <p> + An invalid character set [...] was encountered. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_paren + </p> + </td> +<td> + <p> + Mismatched '(' and ')'. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_brace + </p> + </td> +<td> + <p> + Mismatched '{' and '}'. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_badbrace + </p> + </td> +<td> + <p> + Invalid contents of a {...} block. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_range + </p> + </td> +<td> + <p> + A character range was invalid, for example [d-a]. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_space + </p> + </td> +<td> + <p> + Out of memory. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_badrepeat + </p> + </td> +<td> + <p> + An attempt to repeat something that can not be repeated - for example + a*+ + </p> + </td> +</tr> +<tr> +<td> + <p> + error_complexity + </p> + </td> +<td> + <p> + The expression became too complex to handle. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_stack + </p> + </td> +<td> + <p> + Out of program stack space. + </p> + </td> +</tr> +<tr> +<td> + <p> + error_bad_pattern + </p> + </td> +<td> + <p> + Other unspecified errors. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="match_flag_type.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_traits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/internal_details.html b/libs/regex/doc/html/boost_regex/ref/internal_details.html new file mode 100644 index 0000000000..9192f8e45f --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/internal_details.html @@ -0,0 +1,45 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Internal Details</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="deprecated_interfaces/old_regex.html" title="High Level Class RegEx (Deprecated)"> +<link rel="next" href="internal_details/uni_iter.html" title="Unicode Iterators"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="deprecated_interfaces/old_regex.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="internal_details/uni_iter.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.internal_details"></a><a class="link" href="internal_details.html" title="Internal Details">Internal Details</a> +</h3></div></div></div> +<div class="toc"><dl><dt><span class="section"><a href="internal_details/uni_iter.html">Unicode + Iterators</a></span></dt></dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="deprecated_interfaces/old_regex.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="internal_details/uni_iter.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/internal_details/uni_iter.html b/libs/regex/doc/html/boost_regex/ref/internal_details/uni_iter.html new file mode 100644 index 0000000000..2bca459dfc --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/internal_details/uni_iter.html @@ -0,0 +1,182 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Unicode Iterators</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../internal_details.html" title="Internal Details"> +<link rel="prev" href="../internal_details.html" title="Internal Details"> +<link rel="next" href="../../background_information.html" title="Background Information"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../internal_details.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../internal_details.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../background_information.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.internal_details.uni_iter"></a><a class="link" href="uni_iter.html" title="Unicode Iterators">Unicode + Iterators</a> +</h4></div></div></div> +<h5> +<a name="boost_regex.ref.internal_details.uni_iter.h0"></a> + <span><a name="boost_regex.ref.internal_details.uni_iter.synopsis"></a></span><a class="link" href="uni_iter.html#boost_regex.ref.internal_details.uni_iter.synopsis">Synopsis</a> + </h5> +<p> +</p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">pending</span><span class="special">/</span><span class="identifier">unicode_iterator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></pre> +<p> + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U16Type</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint16_t</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u32_to_u16_iterator</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U32Type</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint32_t</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u16_to_u32_iterator</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U8Type</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint8_t</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u32_to_u8_iterator</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U32Type</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint32_t</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u8_to_u32_iterator</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">utf16_output_iterator</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">utf8_output_iterator</span><span class="special">;</span> +</pre> +<h5> +<a name="boost_regex.ref.internal_details.uni_iter.h1"></a> + <span><a name="boost_regex.ref.internal_details.uni_iter.description"></a></span><a class="link" href="uni_iter.html#boost_regex.ref.internal_details.uni_iter.description">Description</a> + </h5> +<p> + This header contains a selection of iterator adaptors that make a sequence + of characters in one encoding "look like" a read-only sequence + of characters in another encoding. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U16Type</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint16_t</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u32_to_u16_iterator</span> +<span class="special">{</span> + <span class="identifier">u32_to_u16_iterator</span><span class="special">();</span> + <span class="identifier">u32_to_u16_iterator</span><span class="special">(</span><span class="identifier">BaseIterator</span> <span class="identifier">start_position</span><span class="special">);</span> + + <span class="comment">// Other standard BidirectionalIterator members here...</span> +<span class="special">};</span> +</pre> +<p> + A Bidirectional iterator adapter that makes an underlying sequence of UTF32 + characters look like a (read-only) sequence of UTF16 characters. The UTF16 + characters are encoded in the platforms native byte order. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U32Type</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint32_t</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u16_to_u32_iterator</span> +<span class="special">{</span> + <span class="identifier">u16_to_u32_iterator</span><span class="special">();</span> + <span class="identifier">u16_to_u32_iterator</span><span class="special">(</span><span class="identifier">BaseIterator</span> <span class="identifier">start_position</span><span class="special">);</span> + <span class="identifier">u16_to_u32_iterator</span><span class="special">(</span><span class="identifier">BaseIterator</span> <span class="identifier">start_position</span><span class="special">,</span> <span class="identifier">BaseIterator</span> <span class="identifier">start_range</span><span class="special">,</span> <span class="identifier">BaseIterator</span> <span class="identifier">end_range</span><span class="special">);</span> + + <span class="comment">// Other standard BidirectionalIterator members here...</span> +<span class="special">};</span> +</pre> +<p> + A Bidirectional iterator adapter that makes an underlying sequence of UTF16 + characters (in the platforms native byte order) look like a (read-only) + sequence of UTF32 characters. + </p> +<p> + The three-arg constructor of this class takes the start and end of the + underlying sequence as well as the position to start iteration from. This + constructor validates that the underlying sequence has validly encoded + endpoints: this prevents accidently incrementing/decrementing past the + end of the underlying sequence as a result of invalid UTF16 code sequences + at the endpoints of the underlying range. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U8Type</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint8_t</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u32_to_u8_iterator</span> +<span class="special">{</span> + <span class="identifier">u32_to_u8_iterator</span><span class="special">();</span> + <span class="identifier">u32_to_u8_iterator</span><span class="special">(</span><span class="identifier">BaseIterator</span> <span class="identifier">start_position</span><span class="special">);</span> + + <span class="comment">// Other standard BidirectionalIterator members here...</span> +<span class="special">};</span> +</pre> +<p> + A Bidirectional iterator adapter that makes an underlying sequence of UTF32 + characters look like a (read-only) sequence of UTF8 characters. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U32Type</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint32_t</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u8_to_u32_iterator</span> +<span class="special">{</span> + <span class="identifier">u8_to_u32_iterator</span><span class="special">();</span> + <span class="identifier">u8_to_u32_iterator</span><span class="special">(</span><span class="identifier">BaseIterator</span> <span class="identifier">start_position</span><span class="special">);</span> + <span class="identifier">u8_to_u32_iterator</span><span class="special">(</span><span class="identifier">BaseIterator</span> <span class="identifier">start_position</span><span class="special">,</span> <span class="identifier">BaseIterator</span> <span class="identifier">start_range</span><span class="special">,</span> <span class="identifier">BaseIterator</span> <span class="identifier">end_range</span><span class="special">);</span> + + <span class="comment">// Other standard BidirectionalIterator members here...</span> +<span class="special">};</span> +</pre> +<p> + A Bidirectional iterator adapter that makes an underlying sequence of UTF8 + characters look like a (read-only) sequence of UTF32 characters. + </p> +<p> + The three-arg constructor of this class takes the start and end of the + underlying sequence as well as the position to start iteration from. This + constructor validates that the underlying sequence has validly encoded + endpoints: this prevents accidently incrementing/decrementing past the + end of the underlying sequence as a result of invalid UTF8 code sequences + at the endpoints of the underlying range. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">utf16_output_iterator</span> +<span class="special">{</span> + <span class="identifier">utf16_output_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">BaseIterator</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> + <span class="identifier">utf16_output_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">utf16_output_iterator</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> + <span class="identifier">utf16_output_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">utf16_output_iterator</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> + + <span class="comment">// Other standard OutputIterator members here...</span> +<span class="special">};</span> +</pre> +<p> + Simple OutputIterator adapter - accepts UTF32 values as input, and forwards + them to <span class="emphasis"><em>BaseIterator b</em></span> as UTF16. Both UTF32 and UTF16 + values are in native byte order. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BaseIterator</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">utf8_output_iterator</span> +<span class="special">{</span> + <span class="identifier">utf8_output_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">BaseIterator</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> + <span class="identifier">utf8_output_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">utf8_output_iterator</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> + <span class="identifier">utf8_output_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">utf8_output_iterator</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> + + <span class="comment">// Other standard OutputIterator members here...</span> +<span class="special">};</span> +</pre> +<p> + Simple OutputIterator adapter - accepts UTF32 values as input, and forwards + them to <span class="emphasis"><em>BaseIterator b</em></span> as UTF8. The UTF32 input values + must be in native byte order. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../internal_details.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../internal_details.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../background_information.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/match_flag_type.html b/libs/regex/doc/html/boost_regex/ref/match_flag_type.html new file mode 100644 index 0000000000..c35928f1dd --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/match_flag_type.html @@ -0,0 +1,497 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>match_flag_type</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="syntax_option_type/syntax_option_type_literal.html" title="Options for Literal Strings"> +<link rel="next" href="error_type.html" title="error_type"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type/syntax_option_type_literal.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="error_type.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.match_flag_type"></a><a class="link" href="match_flag_type.html" title="match_flag_type">match_flag_type</a> +</h3></div></div></div> +<p> + The type <code class="computeroutput"><span class="identifier">match_flag_type</span></code> + is an implementation specific bitmask type (see C++ std 17.3.2.1.2) that + controls how a regular expression is matched against a character sequence. + The behavior of the format flags is described in more detail in the <a class="link" href="../format.html" title="Search and Replace Format String Syntax">format syntax guide</a>. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">regex_constants</span><span class="special">{</span> + +<span class="keyword">typedef</span> <span class="identifier">implemenation</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">bitmask</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">match_flag_type</span><span class="special">;</span> + +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_default</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_bob</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_eob</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_bol</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_eol</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_bow</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_eow</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_any</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_null</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_continuous</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_partial</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_single_line</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_prev_avail</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_dot_newline</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_not_dot_null</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_posix</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_perl</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_nosubs</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">match_extra</span><span class="special">;</span> + +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">format_default</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">format_sed</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">format_perl</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">format_literal</span><span class="special">;</span> + +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">format_no_copy</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">format_first_only</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">match_flag_type</span> <span class="identifier">format_all</span><span class="special">;</span> + +<span class="special">}</span> <span class="comment">// namespace regex_constants</span> +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<h5> +<a name="boost_regex.ref.match_flag_type.h0"></a> + <span><a name="boost_regex.ref.match_flag_type.description"></a></span><a class="link" href="match_flag_type.html#boost_regex.ref.match_flag_type.description">Description</a> + </h5> +<p> + The type <code class="computeroutput"><span class="identifier">match_flag_type</span></code> + is an implementation specific bitmask type (see C++ std 17.3.2.1.2). When + matching a regular expression against a sequence of characters [first, last) + then setting its elements has the effects listed in the table below: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Effect if set + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + match_default + </p> + </td> +<td> + <p> + Specifies that matching of regular expressions proceeds without + any modification of the normal rules used in ECMA-262, ECMAScript + Language Specification, Chapter 15 part 10, RegExp (Regular Expression) + Objects (FWD.1) + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_bob + </p> + </td> +<td> + <p> + Specifies that the expressions "\A" and "\`" + should not match against the sub-sequence [first,first). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_eob + </p> + </td> +<td> + <p> + Specifies that the expressions "\'", "\z" and + "\Z" should not match against the sub-sequence [last,last). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_bol + </p> + </td> +<td> + <p> + Specifies that the expression "^" should not be matched + against the sub-sequence [first,first). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_eol + </p> + </td> +<td> + <p> + Specifies that the expression "$" should not be matched + against the sub-sequence [last,last). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_bow + </p> + </td> +<td> + <p> + Specifies that the expressions "\<" and "\b" + should not be matched against the sub-sequence [first,first). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_eow + </p> + </td> +<td> + <p> + Specifies that the expressions "\>" and "\b" + should not be matched against the sub-sequence [last,last). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_any + </p> + </td> +<td> + <p> + Specifies that if more than one match is possible then any match + is an acceptable result: this will still find the leftmost match, + but may not find the "best" match at that position. Use + this flag if you care about the speed of matching, but don't care + what was matched (only whether there is one or not). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_null + </p> + </td> +<td> + <p> + Specifies that the expression can not be matched against an empty + sequence. + </p> + </td> +</tr> +<tr> +<td> + <p> + match_continuous + </p> + </td> +<td> + <p> + Specifies that the expression must match a sub-sequence that begins + at first. + </p> + </td> +</tr> +<tr> +<td> + <p> + match_partial + </p> + </td> +<td> + <p> + Specifies that if no match can be found, then it is acceptable + to return a match [from, last) such that from!= last, if there + could exist some longer sequence of characters [from,to) of which + [from,last) is a prefix, and which would result in a full match. + This flag is used when matching incomplete or very long texts, + see the partial matches documentation for more information. + </p> + </td> +</tr> +<tr> +<td> + <p> + match_extra + </p> + </td> +<td> + <p> + Instructs the matching engine to retain all available capture information; + if a capturing group is repeated then information about every repeat + is available via match_results::captures() or sub_match_captures(). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_single_line + </p> + </td> +<td> + <p> + Equivalent to the inverse of Perl's m/ modifier; prevents ^ from + matching after an embedded newline character (so that it only matches + at the start of the text being matched), and $ from matching before + an embedded newline (so that it only matches at the end of the + text being matched). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_prev_avail + </p> + </td> +<td> + <p> + Specifies that --first is a valid iterator position, when this + flag is set then the flags match_not_bol and match_not_bow are + ignored by the regular expression algorithms (RE.7) and iterators + (RE.8). + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_dot_newline + </p> + </td> +<td> + <p> + Specifies that the expression "." does not match a newline + character. This is the inverse of Perl's s/ modifier. + </p> + </td> +</tr> +<tr> +<td> + <p> + match_not_dot_null + </p> + </td> +<td> + <p> + Specifies that the expression "." does not match a character + null '\0'. + </p> + </td> +</tr> +<tr> +<td> + <p> + match_posix + </p> + </td> +<td> + <p> + Specifies that the expression should be matched according to the + POSIX <a class="link" href="../syntax/leftmost_longest_rule.html" title="The Leftmost Longest Rule">leftmost-longest + rule</a>, regardless of what kind of expression was compiled. + Be warned that these rules do not work well with many Perl-specific + features such as non-greedy repeats. + </p> + </td> +</tr> +<tr> +<td> + <p> + match_perl + </p> + </td> +<td> + <p> + Specifies that the expression should be matched according to the + <a class="link" href="../syntax/perl_syntax.html#boost_regex.syntax.perl_syntax.what_gets_matched">Perl + matching rules</a>, irrespective of what kind of expression + was compiled. + </p> + </td> +</tr> +<tr> +<td> + <p> + match_nosubs + </p> + </td> +<td> + <p> + Makes the expression behave as if it had no marked subexpressions, + no matter how many capturing groups are actually present. The + <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> + class will only contain information about the overall match, and + not any sub-expressions. + </p> + </td> +</tr> +<tr> +<td> + <p> + format_default + </p> + </td> +<td> + <p> + Specifies that when a regular expression match is to be replaced + by a new string, that the new string is constructed using the rules + used by the ECMAScript replace function in ECMA-262, ECMAScript + Language Specification, Chapter 15 part 5.4.11 String.prototype.replace. + (FWD.1). + </p> + <p> + This is functionally identical to the <a class="link" href="../format/perl_format.html" title="Perl Format String Syntax">Perl + format string rules</a>. + </p> + <p> + In addition during search and replace operations then all non-overlapping + occurrences of the regular expression are located and replaced, + and sections of the input that did not match the expression, are + copied unchanged to the output string. + </p> + </td> +</tr> +<tr> +<td> + <p> + format_sed + </p> + </td> +<td> + <p> + Specifies that when a regular expression match is to be replaced + by a new string, that the new string is constructed using the rules + used by the Unix sed utility in IEEE Std 1003.1-2001, Portable + Operating SystemInterface (POSIX ), Shells and Utilities. See also + the <a class="link" href="../format/sed_format.html" title="Sed Format String Syntax">Sed Format string + reference</a>. + </p> + </td> +</tr> +<tr> +<td> + <p> + format_perl + </p> + </td> +<td> + <p> + Specifies that when a regular expression match is to be replaced + by a new string, that the new string is constructed using <a class="link" href="../format/perl_format.html" title="Perl Format String Syntax">the same rules as Perl + 5</a>. + </p> + </td> +</tr> +<tr> +<td> + <p> + format_literal + </p> + </td> +<td> + <p> + Specifies that when a regular expression match is to be replaced + by a new string, that the new string is a literal copy of the replacement + text. + </p> + </td> +</tr> +<tr> +<td> + <p> + format_all + </p> + </td> +<td> + <p> + Specifies that all syntax extensions are enabled, including conditional + (?ddexpression1:expression2) replacements: see the <a class="link" href="../format/boost_format_syntax.html" title="Boost-Extended Format String Syntax">format + string guide</a> for more details. + </p> + </td> +</tr> +<tr> +<td> + <p> + format_no_copy + </p> + </td> +<td> + <p> + When specified during a search and replace operation, then sections + of the character container sequence being searched that do match + the regular expression, are not copied to the output string. + </p> + </td> +</tr> +<tr> +<td> + <p> + format_first_only + </p> + </td> +<td> + <p> + When specified during a search and replace operation, then only + the first occurrence of the regular expression is replaced. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type/syntax_option_type_literal.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="error_type.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/match_results.html b/libs/regex/doc/html/boost_regex/ref/match_results.html new file mode 100644 index 0000000000..72dd76263f --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/match_results.html @@ -0,0 +1,832 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>match_results</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="basic_regex.html" title="basic_regex"> +<link rel="next" href="sub_match.html" title="sub_match"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="basic_regex.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="sub_match.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.match_results"></a><a class="link" href="match_results.html" title="match_results">match_results</a> +</h3></div></div></div> +<h5> +<a name="boost_regex.ref.match_results.h0"></a> + <span><a name="boost_regex.ref.match_results.synopsis"></a></span><a class="link" href="match_results.html#boost_regex.ref.match_results.synopsis">Synopsis</a> + </h5> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Regular expressions are different from many simple pattern-matching algorithms + in that as well as finding an overall match they can also produce sub-expression + matches: each sub-expression being delimited in the pattern by a pair of + parenthesis (...). There has to be some method for reporting sub-expression + matches back to the user: this is achieved this by defining a class <code class="computeroutput"><span class="identifier">match_results</span></code> that acts as an indexed collection + of sub-expression matches, each sub-expression match being contained in an + object of type <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a>. + </p> +<p> + Template class <code class="computeroutput"><span class="identifier">match_results</span></code> + denotes a collection of character sequences representing the result of a + regular expression match. Objects of type <code class="computeroutput"><span class="identifier">match_results</span></code> + are passed to the algorithms <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> and <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a>, and are returned by + the iterator <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>. Storage for the + collection is allocated and freed as necessary by the member functions of + class <code class="computeroutput"><span class="identifier">match_results</span></code>. + </p> +<p> + The template class <code class="computeroutput"><span class="identifier">match_results</span></code> + conforms to the requirements of a Sequence, as specified in (lib.sequence.reqmts), + except that only operations defined for const-qualified Sequences are supported. + </p> +<p> + Class template <code class="computeroutput"><span class="identifier">match_results</span></code> + is most commonly used as one of the typedefs <code class="computeroutput"><span class="identifier">cmatch</span></code>, + <code class="computeroutput"><span class="identifier">wcmatch</span></code>, <code class="computeroutput"><span class="identifier">smatch</span></code>, + or <code class="computeroutput"><span class="identifier">wsmatch</span></code>: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">match_results</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> <span class="identifier">cmatch</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> <span class="identifier">wcmatch</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">smatch</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">wstring</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">wsmatch</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">match_results</span> +<span class="special">{</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="keyword">typedef</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="identifier">value_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <span class="identifier">const_reference</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">const_reference</span> <span class="identifier">reference</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">implementation</span> <span class="identifier">defined</span> <span class="identifier">const_iterator</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">const_iterator</span> <span class="identifier">iterator</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">difference_type</span> <span class="identifier">difference_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span><span class="special">::</span><span class="identifier">size_type</span> <span class="identifier">size_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">Allocator</span> <span class="identifier">allocator_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">char_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">></span> <span class="identifier">string_type</span><span class="special">;</span> + + <span class="comment">// construct/copy/destroy:</span> + <a class="link" href="match_results.html#boost_regex.match_results.construct">explicit match_results</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&</span> <span class="identifier">a</span> <span class="special">=</span> <span class="identifier">Allocator</span><span class="special">());</span> + <a class="link" href="match_results.html#boost_regex.match_results.copy_construct">match_results</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special">&</span> <span class="identifier">m</span><span class="special">);</span> + <a class="link" href="match_results.html#boost_regex.match_results.assign">match_results& operator=</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special">&</span> <span class="identifier">m</span><span class="special">);</span> + <span class="special">~</span><span class="identifier">match_results</span><span class="special">();</span> + + <span class="comment">// size:</span> + <span class="identifier">size_type</span> <a class="link" href="match_results.html#boost_regex.match_results.size">size</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">size_type</span> <a class="link" href="match_results.html#boost_regex.match_results.max_size">max_size</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">bool</span> <a class="link" href="match_results.html#boost_regex.match_results.empty">empty</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="comment">// element access:</span> + <span class="identifier">difference_type</span> <a class="link" href="match_results.html#boost_regex.match_results.length">length</a><span class="special">(</span><span class="keyword">int</span> <span class="identifier">sub</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">difference_type</span> <a class="link" href="match_results.html#boost_regex.match_results.length">length</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> + <span class="identifier">difference_type</span> <a class="link" href="match_results.html#boost_regex.match_results.length">length</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> + <span class="identifier">difference_type</span> <a class="link" href="match_results.html#boost_regex.match_results.length">length</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">sub</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">difference_type</span> <a class="link" href="match_results.html#boost_regex.match_results.position">position</a><span class="special">(</span><span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">sub</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">difference_type</span> <a class="link" href="match_results.html#boost_regex.match_results.position">position</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> + <span class="identifier">difference_type</span> <a class="link" href="match_results.html#boost_regex.match_results.position">position</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> + <span class="identifier">difference_type</span> <a class="link" href="match_results.html#boost_regex.match_results.position">position</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">sub</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">string_type</span> <a class="link" href="match_results.html#boost_regex.match_results.str">str</a><span class="special">(</span><span class="keyword">int</span> <span class="identifier">sub</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">string_type</span> <a class="link" href="match_results.html#boost_regex.match_results.str">str</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> + <span class="identifier">string_type</span> <a class="link" href="match_results.html#boost_regex.match_results.str">str</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> + <span class="identifier">string_type</span> <a class="link" href="match_results.html#boost_regex.match_results.str">str</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> + <span class="identifier">string_type</span> <a class="link" href="match_results.html#boost_regex.match_results.str">str</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="identifier">const_reference</span> <a class="link" href="match_results.html#boost_regex.match_results.subscript">operator[]</a><span class="special">(</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">const_reference</span> <a class="link" href="match_results.html#boost_regex.match_results.subscript">operator[]</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> + <span class="identifier">const_reference</span> <a class="link" href="match_results.html#boost_regex.match_results.subscript">operator[]</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> + <span class="identifier">const_reference</span> <a class="link" href="match_results.html#boost_regex.match_results.subscript">operator[]</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> + <span class="identifier">const_reference</span> <a class="link" href="match_results.html#boost_regex.match_results.subscript">operator[]</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + + <span class="identifier">const_reference</span> <a class="link" href="match_results.html#boost_regex.match_results.prefix">prefix</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + + <span class="identifier">const_reference</span> <a class="link" href="match_results.html#boost_regex.match_results.suffix">suffix</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">const_iterator</span> <a class="link" href="match_results.html#boost_regex.match_results.begin">begin</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="identifier">const_iterator</span> <a class="link" href="match_results.html#boost_regex.match_results.end">end</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="comment">// format:</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> + <span class="identifier">OutputIterator</span> <a class="link" href="match_results.html#boost_regex.match_results.format">format</a><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">format_default</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> + <span class="identifier">string_type</span> <a class="link" href="match_results.html#boost_regex.match_results.format2">format</a><span class="special">(</span><span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">format_default</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> + + <span class="identifier">allocator_type</span> <a class="link" href="match_results.html#boost_regex.match_results.get_allocator">get_allocator</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> + <span class="keyword">void</span> <a class="link" href="match_results.html#boost_regex.match_results.swap">swap</a><span class="special">(</span><span class="identifier">match_results</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> + +<span class="preprocessor">#ifdef</span> <span class="identifier">BOOST_REGEX_MATCH_EXTRA</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">value_type</span><span class="special">::</span><span class="identifier">capture_sequence_type</span> <span class="identifier">capture_sequence_type</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">capture_sequence_type</span><span class="special">&</span> <a class="link" href="match_results.html#boost_regex.match_results.captures">captures</a><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="preprocessor">#endif</span> + +<span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="match_results.html#boost_regex.match_results.op_eq">operator ==</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m1</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="match_results.html#boost_regex.match_results.op_ne">operator !=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m1</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> + <a class="link" href="match_results.html#boost_regex.match_results.op_stream">operator <<</a> <span class="special">(</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">os</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">void</span> <a class="link" href="match_results.html#boost_regex.match_results.op_swap">swap</a><span class="special">(</span><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m1</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span> +</pre> +<h5> +<a name="boost_regex.ref.match_results.h1"></a> + <span><a name="boost_regex.ref.match_results.description"></a></span><a class="link" href="match_results.html#boost_regex.ref.match_results.description">Description</a> + </h5> +<p> + In all <code class="computeroutput"><span class="identifier">match_results</span></code> constructors, + a copy of the Allocator argument is used for any memory allocation performed + by the constructor or member functions during the lifetime of the object. + </p> +<a name="boost_regex.match_results.construct"></a><pre class="programlisting"><span class="identifier">match_results</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&</span> <span class="identifier">a</span> <span class="special">=</span> <span class="identifier">Allocator</span><span class="special">());</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class + <code class="computeroutput"><span class="identifier">match_results</span></code>. The postconditions + of this function are indicated in the table: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + empty() + </p> + </td> +<td> + <p> + true + </p> + </td> +</tr> +<tr> +<td> + <p> + size() + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + str() + </p> + </td> +<td> + <p> + basic_string<charT>() + </p> + </td> +</tr> +</tbody> +</table></div> +<a name="boost_regex.match_results.copy_construct"></a><pre class="programlisting"><span class="identifier">match_results</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special">&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object of class match_results, + as a copy of m. + </p> +<a name="boost_regex.match_results.assign"></a><pre class="programlisting"><span class="identifier">match_results</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special">&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Assigns m to *this. The postconditions + of this function are indicated in the table: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + empty() + </p> + </td> +<td> + <p> + m.empty(). + </p> + </td> +</tr> +<tr> +<td> + <p> + size() + </p> + </td> +<td> + <p> + m.size(). + </p> + </td> +</tr> +<tr> +<td> + <p> + str(n) + </p> + </td> +<td> + <p> + m.str(n) for all integers n < m.size(). + </p> + </td> +</tr> +<tr> +<td> + <p> + prefix() + </p> + </td> +<td> + <p> + m.prefix(). + </p> + </td> +</tr> +<tr> +<td> + <p> + suffix() + </p> + </td> +<td> + <p> + m.suffix(). + </p> + </td> +</tr> +<tr> +<td> + <p> + (*this)[n] + </p> + </td> +<td> + <p> + m[n] for all integers n < m.size(). + </p> + </td> +</tr> +<tr> +<td> + <p> + length(n) + </p> + </td> +<td> + <p> + m.length(n) for all integers n < m.size(). + </p> + </td> +</tr> +<tr> +<td> + <p> + position(n) + </p> + </td> +<td> + <p> + m.position(n) for all integers n < m.size(). + </p> + </td> +</tr> +</tbody> +</table></div> +<a name="boost_regex.match_results.size"></a><pre class="programlisting"><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the number of <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> elements stored in *this; + that is the number of marked sub-expressions in the regular expression that + was matched plus one. + </p> +<a name="boost_regex.match_results.max_size"></a><pre class="programlisting"><span class="identifier">size_type</span> <span class="identifier">max_size</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the maximum number of + <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + elements that can be stored in *this. + </p> +<a name="boost_regex.match_results.empty"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns size() == 0. + </p> +<a name="boost_regex.match_results.length"></a><pre class="programlisting"><span class="identifier">difference_type</span> <span class="identifier">length</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">sub</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="identifier">difference_type</span> <span class="identifier">length</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">difference_type</span> <span class="identifier">length</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="identifier">difference_type</span> <span class="identifier">length</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the length of sub-expression + <span class="emphasis"><em>sub</em></span>, that is to say: <code class="computeroutput"><span class="special">(*</span><span class="keyword">this</span><span class="special">)[</span><span class="identifier">sub</span><span class="special">].</span><span class="identifier">length</span><span class="special">()</span></code>. + </p> +<p> + The overloads that accept a string refer to a named sub-expression <span class="emphasis"><em>n</em></span>. + In the event that there is no such named sub-expression then returns zero. + </p> +<p> + The template overloads of this function, allow the string and/or character + type to be different from the character type of the underlying sequence and/or + regular expression: in this case the characters will be widened to the underlying + character type of the original regular expression. A compiler error will + occur if the argument passes a wider character type than the underlying sequence. + These overloads allow a normal narrow character C string literal to be used + as an argument, even when the underlying character type of the expression + being matched may be something more exotic such as a Unicode character type. + </p> +<a name="boost_regex.match_results.position"></a><pre class="programlisting"><span class="identifier">difference_type</span> <span class="identifier">position</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">sub</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="identifier">difference_type</span> <span class="identifier">position</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">difference_type</span> <span class="identifier">position</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="identifier">difference_type</span> <span class="identifier">position</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the starting location of + sub-expression <span class="emphasis"><em>sub</em></span>, or -1 if <span class="emphasis"><em>sub</em></span> + was not matched. Note that if this represents a partial match , then <code class="computeroutput"><span class="identifier">position</span><span class="special">()</span></code> + will return the location of the partial match even though <code class="computeroutput"><span class="special">(*</span><span class="keyword">this</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">matched</span></code> + is false. + </p> +<p> + The overloads that accept a string refer to a named sub-expression <span class="emphasis"><em>n</em></span>. + In the event that there is no such named sub-expression then returns -1. + </p> +<p> + The template overloads of this function, allow the string and/or character + type to be different from the character type of the underlying sequence and/or + regular expression: in this case the characters will be widened to the underlying + character type of the original regular expression. A compiler error will + occur if the argument passes a wider character type than the underlying sequence. + These overloads allow a normal narrow character C string literal to be used + as an argument, even when the underlying character type of the expression + being matched may be something more exotic such as a Unicode character type. + </p> +<a name="boost_regex.match_results.str"></a><pre class="programlisting"><span class="identifier">string_type</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">sub</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="identifier">string_type</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="identifier">string_type</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">string_type</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="identifier">string_type</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns sub-expression <span class="emphasis"><em>sub</em></span> + as a string: <code class="computeroutput"><span class="identifier">string_type</span><span class="special">((*</span><span class="keyword">this</span><span class="special">)[</span><span class="identifier">sub</span><span class="special">])</span></code>. + </p> +<p> + The overloads that accept a string, return the string that matched the named + sub-expression <span class="emphasis"><em>n</em></span>. In the event that there is no such + named sub-expression then returns an empty string. + </p> +<p> + The template overloads of this function, allow the string and/or character + type to be different from the character type of the underlying sequence and/or + regular expression: in this case the characters will be widened to the underlying + character type of the original regular expression. A compiler error will + occur if the argument passes a wider character type than the underlying sequence. + These overloads allow a normal narrow character C string literal to be used + as an argument, even when the underlying character type of the expression + being matched may be something more exotic such as a Unicode character type. + </p> +<a name="boost_regex.match_results.subscript"></a><pre class="programlisting"><span class="identifier">const_reference</span> <span class="keyword">operator</span><span class="special">[](</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> +<span class="identifier">const_reference</span> <span class="keyword">operator</span><span class="special">[](</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="identifier">const_reference</span> <span class="keyword">operator</span><span class="special">[](</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">const_reference</span> <span class="keyword">operator</span><span class="special">[](</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="identifier">const_reference</span> <span class="keyword">operator</span><span class="special">[](</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a reference to the <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + object representing the character sequence that matched marked sub-expression + <span class="emphasis"><em>n</em></span>. If <code class="computeroutput"><span class="identifier">n</span> <span class="special">==</span> <span class="number">0</span></code> then returns + a reference to a <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> object representing the + character sequence that matched the whole regular expression. If <span class="emphasis"><em>n</em></span> + is out of range, or if <span class="emphasis"><em>n</em></span> is an unmatched sub-expression, + then returns a <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + object whose matched member is false. + </p> +<p> + The overloads that accept a string, return a reference to the <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> object representing the + character sequence that matched the named sub-expression <span class="emphasis"><em>n</em></span>. + In the event that there is no such named sub-expression then returns a <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + object whose matched member is false. + </p> +<p> + The template overloads of this function, allow the string and/or character + type to be different from the character type of the underlying sequence and/or + regular expression: in this case the characters will be widened to the underlying + character type of the original regular expression. A compiler error will + occur if the argument passes a wider character type than the underlying sequence. + These overloads allow a normal narrow character C string literal to be used + as an argument, even when the underlying character type of the expression + being matched may be something more exotic such as a Unicode character type. + </p> +<a name="boost_regex.match_results.prefix"></a><pre class="programlisting"><span class="identifier">const_reference</span> <span class="identifier">prefix</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a reference to the <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + object representing the character sequence from the start of the string being + matched or searched, to the start of the match found. + </p> +<a name="boost_regex.match_results.suffix"></a><pre class="programlisting"><span class="identifier">const_reference</span> <span class="identifier">suffix</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a reference to the <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + object representing the character sequence from the end of the match found + to the end of the string being matched or searched. + </p> +<a name="boost_regex.match_results.begin"></a><pre class="programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a starting iterator that + enumerates over all the marked sub-expression matches stored in *this. + </p> +<a name="boost_regex.match_results.end"></a><pre class="programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a terminating iterator + that enumerates over all the marked sub-expression matches stored in *this. + </p> +<a name="boost_regex.match_results_format"></a><a name="boost_regex.match_results.format"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> +<span class="identifier">OutputIterator</span> <span class="identifier">format</span><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">format_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: The type <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + conforms to the Output Iterator requirements (C++ std 24.1.2). + </p> +<p> + The type <code class="computeroutput"><span class="identifier">Formatter</span></code> must be + either a pointer to a null-terminated string of type <code class="computeroutput"><span class="identifier">char_type</span><span class="special">[]</span></code>, or be a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s + (for example <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">></span></code>) + or be a unary, binary or ternary functor that computes the replacement string + from a function call: either <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code> + which must return a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s + to be used as the replacement text, or either <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> + <span class="identifier">out</span><span class="special">)</span></code> + or <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>, both of which write the replacement text + to <code class="computeroutput"><span class="special">*</span><span class="identifier">out</span></code>, + and then return the new OutputIterator position. Note that if the formatter + is a functor, then it is <span class="emphasis"><em>passed by value</em></span>: users that + want to pass function objects with internal state might want to use <a href="../../../../../../doc/html/ref.html" target="_top">Boost.Ref</a> to wrap the object + so that it's passed by reference. + </p> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: If <code class="computeroutput"><span class="identifier">fmt</span></code> + is either a null-terminated string, or a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s, + then copies the character sequence <code class="computeroutput"><span class="special">[</span><span class="identifier">fmt</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">fmt</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span></code> + to <code class="computeroutput"><span class="identifier">OutputIterator</span></code> <span class="emphasis"><em>out</em></span>. + For each format specifier or escape sequence in <span class="emphasis"><em>fmt</em></span>, + replace that sequence with either the character(s) it represents, or the + sequence of characters within <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> to which it refers. The bitmasks specified + in flags determines what format specifiers or escape sequences are recognized, + by default this is the format used by ECMA-262, ECMAScript Language Specification, + Chapter 15 part 5.4.11 String.prototype.replace. + </p> +<p> + If <code class="computeroutput"><span class="identifier">fmt</span></code> is a function object, + then depending on the number of arguments the function object accepts, it + will either: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Call <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code> + and copy the string returned to <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + <span class="emphasis"><em>out</em></span>. + </li> +<li class="listitem"> + Call <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="identifier">out</span><span class="special">)</span></code>. + </li> +<li class="listitem"> + Call <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </li> +</ul></div> +<p> + In all cases the new position of the <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + is returned. + </p> +<p> + See the <a class="link" href="../format.html" title="Search and Replace Format String Syntax">format syntax guide for more information</a>. + </p> +<p> + <span class="bold"><strong>Returns</strong></span>: out. + </p> +<a name="boost_regex.match_results.format2"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> +<span class="identifier">string_type</span> <span class="identifier">format</span><span class="special">(</span><span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">format_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span> The type <code class="computeroutput"><span class="identifier">Formatter</span></code> + must be either a pointer to a null-terminated string of type <code class="computeroutput"><span class="identifier">char_type</span><span class="special">[]</span></code>, + or be a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s + (for example <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">></span></code>) + or be a unary, binary or ternary functor that computes the replacement string + from a function call: either <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code> + which must return a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s + to be used as the replacement text, or either <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> + <span class="identifier">out</span><span class="special">)</span></code> + or <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>, both of which write the replacement text + to <code class="computeroutput"><span class="special">*</span><span class="identifier">out</span></code>, + and then return the new OutputIterator position. + </p> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: If <code class="computeroutput"><span class="identifier">fmt</span></code> + is either a null-terminated string, or a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s, + then copies the string <span class="emphasis"><em>fmt</em></span>: For each format specifier + or escape sequence in <span class="emphasis"><em>fmt</em></span>, replace that sequence with + either the character(s) it represents, or the sequence of characters within + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + to which it refers. The bitmasks specified in flags determines what format + specifiers or escape sequences are recognized, by default this is the format + used by ECMA-262, ECMAScript Language Specification, Chapter 15 part 5.4.11 + String.prototype.replace. + </p> +<p> + If <code class="computeroutput"><span class="identifier">fmt</span></code> is a function object, + then depending on the number of arguments the function object accepts, it + will either: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Call <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code> + and return the result. + </li> +<li class="listitem"> + Call <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">output</span><span class="special">-</span><span class="identifier">iterator</span><span class="special">)</span></code>, + where <code class="computeroutput"><span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">output</span><span class="special">-</span><span class="identifier">iterator</span></code> is an unspecified OutputIterator + type used to copy the output to the string result. + </li> +<li class="listitem"> + Call <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">output</span><span class="special">-</span><span class="identifier">iterator</span><span class="special">,</span> + <span class="identifier">flags</span><span class="special">)</span></code>, + where <code class="computeroutput"><span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">output</span><span class="special">-</span><span class="identifier">iterator</span></code> is an unspecified OutputIterator + type used to copy the output to the string result. + </li> +</ul></div> +<p> + See the <a class="link" href="../format.html" title="Search and Replace Format String Syntax">format syntax guide for more information</a>. + </p> +<a name="boost_regex.match_results.get_allocator"></a><pre class="programlisting"><span class="identifier">allocator_type</span> <span class="identifier">get_allocator</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns a copy of the Allocator + that was passed to the object's constructor. + </p> +<a name="boost_regex.match_results.swap"></a><pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">match_results</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Swaps the contents of the two sequences. + </p> +<p> + <span class="bold"><strong>Postcondition</strong></span>: *this contains the sequence + of matched sub-expressions that were in that, that contains the sequence + of matched sub-expressions that were in *this. + </p> +<p> + <span class="bold"><strong>Complexity</strong></span>: constant time. + </p> +<a name="boost_regex.match_results.capture_type"></a><pre class="programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">value_type</span><span class="special">::</span><span class="identifier">capture_sequence_type</span> <span class="identifier">capture_sequence_type</span><span class="special">;</span> +</pre> +<p> + Defines an implementation-specific type that satisfies the requirements of + a standard library Sequence (21.1.1 including the optional Table 68 operations), + whose value_type is a <code class="computeroutput"><span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span></code>. This type happens to be <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="special">></span></code>, + but you shouldn't actually rely on that. + </p> +<a name="boost_regex.match_results.captures"></a><pre class="programlisting"><span class="keyword">const</span> <span class="identifier">capture_sequence_type</span><span class="special">&</span> <span class="identifier">captures</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: that the match_results object + has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from + a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>, + and that the underlying iterators have not been subsequently invalidated. + Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object + was not initialized. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: returns a sequence containing all + the captures obtained for sub-expression i. + </p> +<p> + <span class="bold"><strong>Returns</strong></span>: <code class="computeroutput"><span class="special">(*</span><span class="keyword">this</span><span class="special">)[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">captures</span><span class="special">();</span></code> + </p> +<p> + <span class="bold"><strong>Preconditions</strong></span>: the library must be built + and used with BOOST_REGEX_MATCH_EXTRA defined, and you must pass the flag + match_extra to the regex matching functions ( <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a>, <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a>, <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> or <a class="link" href="regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a>) in order for + this member function to be defined and return useful information. + </p> +<p> + <span class="bold"><strong>Rationale</strong></span>: Enabling this feature has several + consequences: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + sub_match occupies more memory resulting in complex expressions running + out of memory or stack space more quickly during matching. + </li> +<li class="listitem"> + The matching algorithms are less efficient at handling some features + (independent sub-expressions for example), even when match_extra is not + used. + </li> +<li class="listitem"> + The matching algorithms are much less efficient (i.e. slower), when match_extra + is used. Mostly this is down to the extra memory allocations that have + to take place. + </li> +</ul></div> +<a name="boost_regex.match_results.op_eq"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m1</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Compares the two sequences for + equality. + </p> +<a name="boost_regex.match_results.op_ne"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m1</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Compares the two sequences for + inequality. + </p> +<a name="boost_regex.match_results.op_stream"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> + <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">os</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Writes the contents of <span class="emphasis"><em>m</em></span> + to the stream <span class="emphasis"><em>os</em></span> as if by calling <code class="computeroutput"><span class="identifier">os</span> + <span class="special"><<</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>; + Returns <span class="emphasis"><em>os</em></span>. + </p> +<a name="boost_regex.match_results.op_swap"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m1</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Swaps the contents of the two sequences. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="basic_regex.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="sub_match.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings.html new file mode 100644 index 0000000000..830ad6a9ef --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings.html @@ -0,0 +1,87 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Interfacing With Non-Standard String Types</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="regex_traits.html" title="regex_traits"> +<link rel="next" href="non_std_strings/icu.html" title="Working With Unicode and ICU String Types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_traits.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="non_std_strings/icu.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.non_std_strings"></a><a class="link" href="non_std_strings.html" title="Interfacing With Non-Standard String Types">Interfacing With Non-Standard + String Types</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="non_std_strings/icu.html">Working With Unicode + and ICU String Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="non_std_strings/icu/intro.html">Introduction + to using Regex with ICU</a></span></dt> +<dt><span class="section"><a href="non_std_strings/icu/unicode_types.html">Unicode + regular expression types</a></span></dt> +<dt><span class="section"><a href="non_std_strings/icu/unicode_algo.html">Unicode + Regular Expression Algorithms</a></span></dt> +<dt><span class="section"><a href="non_std_strings/icu/unicode_iter.html">Unicode + Aware Regex Iterators</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="non_std_strings/mfc_strings.html">Using + Boost Regex With MFC Strings</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="non_std_strings/mfc_strings/mfc_intro.html">Introduction + to Boost.Regex and MFC Strings</a></span></dt> +<dt><span class="section"><a href="non_std_strings/mfc_strings/mfc_regex_types.html">Regex + Types Used With MFC Strings</a></span></dt> +<dt><span class="section"><a href="non_std_strings/mfc_strings/mfc_regex_create.html">Regular + Expression Creation From an MFC String</a></span></dt> +<dt><span class="section"><a href="non_std_strings/mfc_strings/mfc_algo.html">Overloaded + Algorithms For MFC String Types</a></span></dt> +<dt><span class="section"><a href="non_std_strings/mfc_strings/mfc_iter.html">Iterating + Over the Matches Within An MFC String</a></span></dt> +</dl></dd> +</dl></div> +<p> + The Boost.Regex algorithms and iterators are all iterator-based, with convenience + overloads of the algorithms provided that convert standard library string + types to iterator pairs internally. If you want to search a non-standard + string type then the trick is to convert that string into an iterator pair: + so far I haven't come across any string types that can't be handled this + way, even if they're not officially iterator based. Certainly any string + type that provides access to it's internal buffer, along with it's length, + can be converted into a pair of pointers (which can be used as iterators). + </p> +<p> + Some non-standard string types are sufficiently common that wappers have + been provided for them already: currently this includes the ICU and MFC string + class types. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_traits.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="non_std_strings/icu.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu.html new file mode 100644 index 0000000000..dc74fd510b --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu.html @@ -0,0 +1,54 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Working With Unicode and ICU String Types</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../non_std_strings.html" title="Interfacing With Non-Standard String Types"> +<link rel="prev" href="../non_std_strings.html" title="Interfacing With Non-Standard String Types"> +<link rel="next" href="icu/intro.html" title="Introduction to using Regex with ICU"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../non_std_strings.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../non_std_strings.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="icu/intro.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.non_std_strings.icu"></a><a class="link" href="icu.html" title="Working With Unicode and ICU String Types">Working With Unicode + and ICU String Types</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="icu/intro.html">Introduction + to using Regex with ICU</a></span></dt> +<dt><span class="section"><a href="icu/unicode_types.html">Unicode + regular expression types</a></span></dt> +<dt><span class="section"><a href="icu/unicode_algo.html">Unicode + Regular Expression Algorithms</a></span></dt> +<dt><span class="section"><a href="icu/unicode_iter.html">Unicode + Aware Regex Iterators</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../non_std_strings.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../non_std_strings.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="icu/intro.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/intro.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/intro.html new file mode 100644 index 0000000000..cc75950bf5 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/intro.html @@ -0,0 +1,76 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Introduction to using Regex with ICU</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../icu.html" title="Working With Unicode and ICU String Types"> +<link rel="prev" href="../icu.html" title="Working With Unicode and ICU String Types"> +<link rel="next" href="unicode_types.html" title="Unicode regular expression types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../icu.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../icu.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unicode_types.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.icu.intro"></a><a class="link" href="intro.html" title="Introduction to using Regex with ICU">Introduction + to using Regex with ICU</a> +</h5></div></div></div> +<p> + The header: + </p> +<pre class="programlisting"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">icu</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + contains the data types and algorithms necessary for working with regular + expressions in a Unicode aware environment. + </p> +<p> + In order to use this header you will need the <a href="http://www.ibm.com/software/globalization/icu/" target="_top">ICU + library</a>, and you will need to have built the Boost.Regex library + with <a class="link" href="../../../install.html#boost_regex.install.building_with_unicode_and_icu_support">ICU + support enabled</a>. + </p> +<p> + The header will enable you to: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Create regular expressions that treat Unicode strings as sequences + of UTF-32 code points. + </li> +<li class="listitem"> + Create regular expressions that support various Unicode data properties, + including character classification. + </li> +<li class="listitem"> + Transparently search Unicode strings that are encoded as either UTF-8, + UTF-16 or UTF-32. + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../icu.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../icu.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unicode_types.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html new file mode 100644 index 0000000000..66cafb53a0 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html @@ -0,0 +1,180 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Unicode Regular Expression Algorithms</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../icu.html" title="Working With Unicode and ICU String Types"> +<link rel="prev" href="unicode_types.html" title="Unicode regular expression types"> +<link rel="next" href="unicode_iter.html" title="Unicode Aware Regex Iterators"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="unicode_types.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../icu.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unicode_iter.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.icu.unicode_algo"></a><a class="link" href="unicode_algo.html" title="Unicode Regular Expression Algorithms">Unicode + Regular Expression Algorithms</a> +</h5></div></div></div> +<p> + The regular expression algorithms <a class="link" href="../../regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a>, <a class="link" href="../../regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> and <a class="link" href="../../regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a> all expect that + the character sequence upon which they operate, is encoded in the same + character encoding as the regular expression object with which they are + used. For Unicode regular expressions that behavior is undesirable: while + we may want to process the data in UTF-32 "chunks", the actual + data is much more likely to encoded as either UTF-8 or UTF-16. Therefore + the header <boost/regex/icu.hpp> provides a series of thin wrappers + around these algorithms, called <code class="computeroutput"><span class="identifier">u32regex_match</span></code>, + <code class="computeroutput"><span class="identifier">u32regex_search</span></code>, and + <code class="computeroutput"><span class="identifier">u32regex_replace</span></code>. These + wrappers use iterator-adapters internally to make external UTF-8 or UTF-16 + data look as though it's really a UTF-32 sequence, that can then be passed + on to the "real" algorithm. + </p> +<h5> +<a name="boost_regex.ref.non_std_strings.icu.unicode_algo.h0"></a> + <span><a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_match"></a></span><a class="link" href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_match">u32regex_match</a> + </h5> +<p> + For each <a class="link" href="../../regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> + algorithm defined by <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, + then <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">icu</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> defines an overloaded algorithm that + takes the same arguments, but which is called <code class="computeroutput"><span class="identifier">u32regex_match</span></code>, + and which will accept UTF-8, UTF-16 or UTF-32 encoded data, as well as + an ICU UnicodeString as input. + </p> +<p> + Example: match a password, encoded in a UTF-16 UnicodeString: + </p> +<pre class="programlisting"><span class="comment">//</span> +<span class="comment">// Find out if *password* meets our password requirements,</span> +<span class="comment">// as defined by the regular expression *requirements*.</span> +<span class="comment">//</span> +<span class="keyword">bool</span> <span class="identifier">is_valid_password</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">password</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">requirements</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex_match</span><span class="special">(</span><span class="identifier">password</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_u32regex</span><span class="special">(</span><span class="identifier">requirements</span><span class="special">));</span> +<span class="special">}</span> +</pre> +<p> + Example: match a UTF-8 encoded filename: + </p> +<pre class="programlisting"><span class="comment">//</span> +<span class="comment">// Extract filename part of a path from a UTF-8 encoded std::string and return the result</span> +<span class="comment">// as another std::string:</span> +<span class="comment">//</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">get_filename</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">path</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_u32regex</span><span class="special">(</span><span class="string">"(?:\\A|.*\\\\)([^\\\\]+)"</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">smatch</span> <span class="identifier">what</span><span class="special">;</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex_match</span><span class="special">(</span><span class="identifier">path</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">r</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// extract $1 as a std::string:</span> + <span class="keyword">return</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">str</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> + <span class="special">}</span> + <span class="keyword">else</span> + <span class="special">{</span> + <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="string">"Invalid pathname"</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +<h5> +<a name="boost_regex.ref.non_std_strings.icu.unicode_algo.h1"></a> + <span><a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_search"></a></span><a class="link" href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_search">u32regex_search</a> + </h5> +<p> + For each <a class="link" href="../../regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> + algorithm defined by <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, + then <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">icu</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> defines an overloaded algorithm that + takes the same arguments, but which is called <code class="computeroutput"><span class="identifier">u32regex_search</span></code>, + and which will accept UTF-8, UTF-16 or UTF-32 encoded data, as well as + an ICU UnicodeString as input. + </p> +<p> + Example: search for a character sequence in a specific language block: + </p> +<pre class="programlisting"><span class="identifier">UnicodeString</span> <span class="identifier">extract_greek</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">text</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// searches through some UTF-16 encoded text for a block encoded in Greek,</span> + <span class="comment">// this expression is imperfect, but the best we can do for now - searching</span> + <span class="comment">// for specific scripts is actually pretty hard to do right.</span> + <span class="comment">//</span> + <span class="comment">// Here we search for a character sequence that begins with a Greek letter,</span> + <span class="comment">// and continues with characters that are either not-letters ( [^[:L*:]] )</span> + <span class="comment">// or are characters in the Greek character block ( [\\x{370}-\\x{3FF}] ).</span> + <span class="comment">//</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_u32regex</span><span class="special">(</span> + <span class="identifier">L</span><span class="string">"[\\x{370}-\\x{3FF}](?:[^[:L*:]]|[\\x{370}-\\x{3FF}])*"</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u16match</span> <span class="identifier">what</span><span class="special">;</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex_search</span><span class="special">(</span><span class="identifier">text</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">r</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// extract $0 as a UnicodeString:</span> + <span class="keyword">return</span> <span class="identifier">UnicodeString</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">length</span><span class="special">(</span><span class="number">0</span><span class="special">));</span> + <span class="special">}</span> + <span class="keyword">else</span> + <span class="special">{</span> + <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="string">"No Greek found!"</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +<h5> +<a name="boost_regex.ref.non_std_strings.icu.unicode_algo.h2"></a> + <span><a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_replace"></a></span><a class="link" href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_replace">u32regex_replace</a> + </h5> +<p> + For each <a class="link" href="../../regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a> algorithm defined + by <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, then <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">icu</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + defines an overloaded algorithm that takes the same arguments, but which + is called <code class="computeroutput"><span class="identifier">u32regex_replace</span></code>, + and which will accept UTF-8, UTF-16 or UTF-32 encoded data, as well as + an ICU UnicodeString as input. The input sequence and the format string + specifier passed to the algorithm, can be encoded independently (for + example one can be UTF-8, the other in UTF-16), but the result string + / output iterator argument must use the same character encoding as the + text being searched. + </p> +<p> + Example: Credit card number reformatting: + </p> +<pre class="programlisting"><span class="comment">//</span> +<span class="comment">// Take a credit card number as a string of digits, </span> +<span class="comment">// and reformat it as a human readable string with "-"</span> +<span class="comment">// separating each group of four digit;, </span> +<span class="comment">// note that we're mixing a UTF-32 regex, with a UTF-16</span> +<span class="comment">// string and a UTF-8 format specifier, and it still all </span> +<span class="comment">// just works:</span> +<span class="comment">//</span> +<span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex</span> <span class="identifier">e</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_u32regex</span><span class="special">(</span> + <span class="string">"\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"</span><span class="special">);</span> +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">human_format</span> <span class="special">=</span> <span class="string">"$1-$2-$3-$4"</span><span class="special">;</span> + +<span class="identifier">UnicodeString</span> <span class="identifier">human_readable_card_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">s</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex_replace</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">human_format</span><span class="special">);</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="unicode_types.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../icu.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unicode_iter.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html new file mode 100644 index 0000000000..bd5bfdaf97 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html @@ -0,0 +1,323 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Unicode Aware Regex Iterators</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../icu.html" title="Working With Unicode and ICU String Types"> +<link rel="prev" href="unicode_algo.html" title="Unicode Regular Expression Algorithms"> +<link rel="next" href="../mfc_strings.html" title="Using Boost Regex With MFC Strings"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="unicode_algo.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../icu.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.icu.unicode_iter"></a><a class="link" href="unicode_iter.html" title="Unicode Aware Regex Iterators">Unicode + Aware Regex Iterators</a> +</h5></div></div></div> +<h5> +<a name="boost_regex.ref.non_std_strings.icu.unicode_iter.h0"></a> + <span><a name="boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_iterator"></a></span><a class="link" href="unicode_iter.html#boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_iterator">u32regex_iterator</a> + </h5> +<p> + Type <code class="computeroutput"><span class="identifier">u32regex_iterator</span></code> + is in all respects the same as <a class="link" href="../../regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> except that since + the regular expression type is always <code class="computeroutput"><span class="identifier">u32regex</span></code> + it only takes one template parameter (the iterator type). It also calls + <code class="computeroutput"><span class="identifier">u32regex_search</span></code> internally, + allowing it to interface correctly with UTF-8, UTF-16, and UTF-32 data: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u32regex_iterator</span> +<span class="special">{</span> + <span class="comment">// for members see regex_iterator</span> +<span class="special">};</span> + +<span class="keyword">typedef</span> <span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> <span class="identifier">utf8regex_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> <span class="identifier">utf16regex_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar32</span><span class="special">*></span> <span class="identifier">utf32regex_iterator</span><span class="special">;</span> +</pre> +<p> + In order to simplify the construction of a <code class="computeroutput"><span class="identifier">u32regex_iterator</span></code> + from a string, there are a series of non-member helper functions called + make_u32regex_iterator: + </p> +<pre class="programlisting"><span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> + <span class="identifier">make_u32regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> + <span class="identifier">make_u32regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> + <span class="identifier">make_u32regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">></span> +<span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">></span> + <span class="identifier">make_u32regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> + <span class="identifier">make_u32regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + Each of these overloads returns an iterator that enumerates all occurrences + of expression <span class="emphasis"><em>e</em></span>, in text <span class="emphasis"><em>s</em></span>, + using match_flags <span class="emphasis"><em>m</em></span>. + </p> +<p> + Example: search for international currency symbols, along with their + associated numeric value: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">enumerate_currencies</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">text</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// enumerate and print all the currency symbols, along</span> + <span class="comment">// with any associated numeric values:</span> + <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">re</span> <span class="special">=</span> + <span class="string">"([[:Sc:]][[:Cf:][:Cc:][:Z*:]]*)?"</span> + <span class="string">"([[:Nd:]]+(?:[[:Po:]][[:Nd:]]+)?)?"</span> + <span class="string">"(?(1)"</span> + <span class="string">"|(?(2)"</span> + <span class="string">"[[:Cf:][:Cc:][:Z*:]]*"</span> + <span class="string">")"</span> + <span class="string">"[[:Sc:]]"</span> + <span class="string">")"</span><span class="special">;</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_u32regex</span><span class="special">(</span><span class="identifier">re</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex_iterator</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> + <span class="identifier">i</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_u32regex_iterator</span><span class="special">(</span><span class="identifier">text</span><span class="special">,</span> <span class="identifier">r</span><span class="special">)),</span> <span class="identifier">j</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">(*</span><span class="identifier">i</span><span class="special">)[</span><span class="number">0</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">++</span><span class="identifier">i</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +<p> + Calling + </p> +<pre class="programlisting">enumerate_currencies(" $100.23 or £198.12 ");</pre> +<p> + Yields the output: + </p> +<pre class="programlisting">$100.23 +£198.12 +</pre> +<p> + Provided of course that the input is encoded as UTF-8. + </p> +<h5> +<a name="boost_regex.ref.non_std_strings.icu.unicode_iter.h1"></a> + <span><a name="boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_token_iterator"></a></span><a class="link" href="unicode_iter.html#boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_token_iterator">u32regex_token_iterator</a> + </h5> +<p> + Type <code class="computeroutput"><span class="identifier">u32regex_token_iterator</span></code> + is in all respects the same as <a class="link" href="../../regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> except + that since the regular expression type is always <code class="computeroutput"><span class="identifier">u32regex</span></code> + it only takes one template parameter (the iterator type). It also calls + <code class="computeroutput"><span class="identifier">u32regex_search</span></code> internally, + allowing it to interface correctly with UTF-8, UTF-16, and UTF-32 data: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">u32regex_token_iterator</span> +<span class="special">{</span> + <span class="comment">// for members see regex_token_iterator</span> +<span class="special">};</span> + +<span class="keyword">typedef</span> <span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> <span class="identifier">utf8regex_token_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> <span class="identifier">utf16regex_token_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar32</span><span class="special">*></span> <span class="identifier">utf32regex_token_iterator</span><span class="special">;</span> +</pre> +<p> + In order to simplify the construction of a <code class="computeroutput"><span class="identifier">u32regex_token_iterator</span></code> + from a string, there are a series of non-member helper functions called + <code class="computeroutput"><span class="identifier">make_u32regex_token_iterator</span></code>: + </p> +<pre class="programlisting"><span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">sub</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">sub</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">sub</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">></span> +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">sub</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">sub</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + Each of these overloads returns an iterator that enumerates all occurrences + of marked sub-expression sub in regular expression <span class="emphasis"><em>e</em></span>, + found in text <span class="emphasis"><em>s</em></span>, using match_flags <span class="emphasis"><em>m</em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + Each of these overloads returns an iterator that enumerates one sub-expression + for each submatch in regular expression <span class="emphasis"><em>e</em></span>, found + in text <span class="emphasis"><em>s</em></span>, using match_flags <span class="emphasis"><em>m</em></span>. + </p> +<pre class="programlisting"><span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">></span> +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*></span> + <span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">u32regex</span><span class="special">&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + Each of these overloads returns an iterator that enumerates one sub-expression + for each submatch in regular expression <span class="emphasis"><em>e</em></span>, found + in text <span class="emphasis"><em>s</em></span>, using match_flags <span class="emphasis"><em>m</em></span>. + </p> +<p> + Example: search for international currency symbols, along with their + associated numeric value: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">enumerate_currencies2</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">text</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// enumerate and print all the currency symbols, along</span> + <span class="comment">// with any associated numeric values:</span> + <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">re</span> <span class="special">=</span> + <span class="string">"([[:Sc:]][[:Cf:][:Cc:][:Z*:]]*)?"</span> + <span class="string">"([[:Nd:]]+(?:[[:Po:]][[:Nd:]]+)?)?"</span> + <span class="string">"(?(1)"</span> + <span class="string">"|(?(2)"</span> + <span class="string">"[[:Cf:][:Cc:][:Z*:]]*"</span> + <span class="string">")"</span> + <span class="string">"[[:Sc:]]"</span> + <span class="string">")"</span><span class="special">;</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_u32regex</span><span class="special">(</span><span class="identifier">re</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">u32regex_token_iterator</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> + <span class="identifier">i</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_u32regex_token_iterator</span><span class="special">(</span><span class="identifier">text</span><span class="special">,</span> <span class="identifier">r</span><span class="special">,</span> <span class="number">1</span><span class="special">)),</span> <span class="identifier">j</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">*</span><span class="identifier">i</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">++</span><span class="identifier">i</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="unicode_algo.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../icu.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_types.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_types.html new file mode 100644 index 0000000000..34ca7a556c --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_types.html @@ -0,0 +1,132 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Unicode regular expression types</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../icu.html" title="Working With Unicode and ICU String Types"> +<link rel="prev" href="intro.html" title="Introduction to using Regex with ICU"> +<link rel="next" href="unicode_algo.html" title="Unicode Regular Expression Algorithms"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="intro.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../icu.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unicode_algo.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.icu.unicode_types"></a><a class="link" href="unicode_types.html" title="Unicode regular expression types">Unicode + regular expression types</a> +</h5></div></div></div> +<p> + Header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">icu</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> provides a regular expression traits + class that handles UTF-32 characters: + </p> +<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">icu_regex_traits</span><span class="special">;</span> +</pre> +<p> + and a regular expression type based upon that: + </p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">UChar32</span><span class="special">,</span><span class="identifier">icu_regex_traits</span><span class="special">></span> <span class="identifier">u32regex</span><span class="special">;</span> +</pre> +<p> + The type <code class="computeroutput"><span class="identifier">u32regex</span></code> is + regular expression type to use for all Unicode regular expressions; internally + it uses UTF-32 code points, but can be created from, and used to search, + either UTF-8, or UTF-16 encoded strings as well as UTF-32 ones. + </p> +<p> + The constructors, and assign member functions of <code class="computeroutput"><span class="identifier">u32regex</span></code>, + require UTF-32 encoded strings, but there are a series of overloaded + algorithms called <code class="computeroutput"><span class="identifier">make_u32regex</span></code> + which allow regular expressions to be created from UTF-8, UTF-16, or + UTF-32 encoded strings: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">InputIterator</span><span class="special">></span> +<span class="identifier">u32regex</span> <span class="identifier">make_u32regex</span><span class="special">(</span><span class="identifier">InputIterator</span> <span class="identifier">i</span><span class="special">,</span> + <span class="identifier">InputIterator</span> <span class="identifier">j</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">syntax_option_type</span> <span class="identifier">opt</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Creates a regular expression + object from the iterator sequence [i,j). The character encoding of the + sequence is determined based upon sizeof(*i): 1 implies UTF-8, 2 implies + UTF-16, and 4 implies UTF-32. + </p> +<pre class="programlisting"><span class="identifier">u32regex</span> <span class="identifier">make_u32regex</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">syntax_option_type</span> <span class="identifier">opt</span> + <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">perl</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Creates a regular expression + object from the Null-terminated UTF-8 characater sequence <span class="emphasis"><em>p</em></span>. + </p> +<pre class="programlisting"><span class="identifier">u32regex</span> <span class="identifier">make_u32regex</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">unsigned</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">syntax_option_type</span> <span class="identifier">opt</span> + <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">perl</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Creates a regular expression + object from the Null-terminated UTF-8 characater sequence p. + </p> +<pre class="programlisting"><span class="identifier">u32regex</span> <span class="identifier">make_u32regex</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">syntax_option_type</span> <span class="identifier">opt</span> + <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">perl</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Creates a regular expression + object from the Null-terminated characater sequence p. The character + encoding of the sequence is determined based upon sizeof(wchar_t): 1 + implies UTF-8, 2 implies UTF-16, and 4 implies UTF-32. + </p> +<pre class="programlisting"><span class="identifier">u32regex</span> <span class="identifier">make_u32regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UChar</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">syntax_option_type</span> <span class="identifier">opt</span> + <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">perl</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Creates a regular expression + object from the Null-terminated UTF-16 characater sequence p. + </p> +<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="identifier">u32regex</span> <span class="identifier">make_u32regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">C</span><span class="special">,</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">syntax_option_type</span> <span class="identifier">opt</span> + <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">perl</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Creates a regular expression + object from the string s. The character encoding of the string is determined + based upon sizeof(C): 1 implies UTF-8, 2 implies UTF-16, and 4 implies + UTF-32. + </p> +<pre class="programlisting"><span class="identifier">u32regex</span> <span class="identifier">make_u32regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnicodeString</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">syntax_option_type</span> <span class="identifier">opt</span> + <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">perl</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Creates a regular expression + object from the UTF-16 encoding string s. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="intro.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../icu.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unicode_algo.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings.html new file mode 100644 index 0000000000..a29f9c6339 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings.html @@ -0,0 +1,56 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Using Boost Regex With MFC Strings</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../non_std_strings.html" title="Interfacing With Non-Standard String Types"> +<link rel="prev" href="icu/unicode_iter.html" title="Unicode Aware Regex Iterators"> +<link rel="next" href="mfc_strings/mfc_intro.html" title="Introduction to Boost.Regex and MFC Strings"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="icu/unicode_iter.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../non_std_strings.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_strings/mfc_intro.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.non_std_strings.mfc_strings"></a><a class="link" href="mfc_strings.html" title="Using Boost Regex With MFC Strings">Using + Boost Regex With MFC Strings</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="mfc_strings/mfc_intro.html">Introduction + to Boost.Regex and MFC Strings</a></span></dt> +<dt><span class="section"><a href="mfc_strings/mfc_regex_types.html">Regex + Types Used With MFC Strings</a></span></dt> +<dt><span class="section"><a href="mfc_strings/mfc_regex_create.html">Regular + Expression Creation From an MFC String</a></span></dt> +<dt><span class="section"><a href="mfc_strings/mfc_algo.html">Overloaded + Algorithms For MFC String Types</a></span></dt> +<dt><span class="section"><a href="mfc_strings/mfc_iter.html">Iterating + Over the Matches Within An MFC String</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="icu/unicode_iter.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../non_std_strings.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_strings/mfc_intro.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html new file mode 100644 index 0000000000..87b645ff37 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html @@ -0,0 +1,228 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Overloaded Algorithms For MFC String Types</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../mfc_strings.html" title="Using Boost Regex With MFC Strings"> +<link rel="prev" href="mfc_regex_create.html" title="Regular Expression Creation From an MFC String"> +<link rel="next" href="mfc_iter.html" title="Iterating Over the Matches Within An MFC String"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mfc_regex_create.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_iter.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo"></a><a class="link" href="mfc_algo.html" title="Overloaded Algorithms For MFC String Types">Overloaded + Algorithms For MFC String Types</a> +</h5></div></div></div> +<p> + For each regular expression algorithm that's overloaded for a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code> argument, there is also + one overloaded for the MFC/ATL string types. These algorithm signatures + all look a lot more complex than they actually are, but for completeness + here they are anyway: + </p> +<h5> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.h0"></a> + <span><a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match"></a></span><a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match">regex_match</a> + </h5> +<p> + There are two overloads, the first reports what matched in a match_results + structure, the second does not. + </p> +<p> + All the usual caveats for <a class="link" href="../../regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> apply, in particular + the algorithm will only report a successful match if all of the input + text matches the expression, if this isn't what you want then use <a class="link" href="../../regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> + instead. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">B</span><span class="special">*,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">what</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">T</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">()</span> + <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">f</span><span class="special">);</span></code> + </p> +<p> + <span class="bold"><strong>Example:</strong></span> + </p> +<pre class="programlisting"><span class="comment">//</span> +<span class="comment">// Extract filename part of a path from a CString and return the result</span> +<span class="comment">// as another CString:</span> +<span class="comment">//</span> +<span class="identifier">CString</span> <span class="identifier">get_filename</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">CString</span><span class="special">&</span> <span class="identifier">path</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tregex</span> <span class="identifier">r</span><span class="special">(</span><span class="identifier">__T</span><span class="special">(</span><span class="string">"(?:\\A|.*\\\\)([^\\\\]+)"</span><span class="special">));</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tmatch</span> <span class="identifier">what</span><span class="special">;</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">path</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">r</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// extract $1 as a CString:</span> + <span class="keyword">return</span> <span class="identifier">CString</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">1</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">length</span><span class="special">(</span><span class="number">1</span><span class="special">));</span> + <span class="special">}</span> + <span class="keyword">else</span> + <span class="special">{</span> + <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="string">"Invalid pathname"</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +<h5> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.h1"></a> + <span><a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match__second_overload_"></a></span><a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match__second_overload_">regex_match + (second overload)</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">T</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">)</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">()</span> + <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">f</span><span class="special">);</span></code> + </p> +<p> + <span class="bold"><strong>Example:</strong></span> + </p> +<pre class="programlisting"><span class="comment">//</span> +<span class="comment">// Find out if *password* meets our password requirements,</span> +<span class="comment">// as defined by the regular expression *requirements*.</span> +<span class="comment">//</span> +<span class="keyword">bool</span> <span class="identifier">is_valid_password</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">CString</span><span class="special">&</span> <span class="identifier">password</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">CString</span><span class="special">&</span> <span class="identifier">requirements</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">password</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_regex</span><span class="special">(</span><span class="identifier">requirements</span><span class="special">));</span> +<span class="special">}</span> +</pre> +<h5> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.h2"></a> + <span><a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search"></a></span><a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search">regex_search</a> + </h5> +<p> + There are two additional overloads for <a class="link" href="../../regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a>, the first reports + what matched the second does not: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">what</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">T</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">)</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns ::boost::regex_search(s.GetString(), + s.GetString() + s.GetLength(), what, e, f); + </p> +<p> + <span class="bold"><strong>Example</strong></span>: Postcode extraction from an + address string. + </p> +<pre class="programlisting"><span class="identifier">CString</span> <span class="identifier">extract_postcode</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">CString</span><span class="special">&</span> <span class="identifier">address</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// searches throw address for a UK postcode and returns the result,</span> + <span class="comment">// the expression used is by Phil A. on www.regxlib.com:</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tregex</span> <span class="identifier">r</span><span class="special">(</span><span class="identifier">__T</span><span class="special">(</span><span class="string">"^(([A-Z]{1,2}[0-9]{1,2})|([A-Z]{1,2}[0-9][A-Z]))\\s?([0-9][A-Z]{2})$"</span><span class="special">));</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tmatch</span> <span class="identifier">what</span><span class="special">;</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">address</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">r</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// extract $0 as a CString:</span> + <span class="keyword">return</span> <span class="identifier">CString</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">length</span><span class="special">());</span> + <span class="special">}</span> + <span class="keyword">else</span> + <span class="special">{</span> + <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="string">"No postcode found"</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +<h5> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.h3"></a> + <span><a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search__second_overload_"></a></span><a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search__second_overload_">regex_search + (second overload)</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">inline</span> <span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">T</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">)</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">()</span> + <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">f</span><span class="special">);</span></code> + </p> +<h5> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.h4"></a> + <span><a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_replace"></a></span><a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_replace">regex_replace</a> + </h5> +<p> + There are two additional overloads for <a class="link" href="../../regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a>, the first sends + output to an output iterator, while the second creates a new string + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> + <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">OutputIterator</span> <span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">)</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">fmt</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> + <span class="identifier">flags</span><span class="special">);</span></code> + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="identifier">regex_replace</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">)</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns a new string created + using <a class="link" href="../../regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a>, + and the same memory manager as string <span class="emphasis"><em>s</em></span>. + </p> +<p> + <span class="bold"><strong>Example</strong></span>: + </p> +<pre class="programlisting"><span class="comment">//</span> +<span class="comment">// Take a credit card number as a string of digits, </span> +<span class="comment">// and reformat it as a human readable string with "-"</span> +<span class="comment">// separating each group of four digits:</span> +<span class="comment">//</span> +<span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tregex</span> <span class="identifier">e</span><span class="special">(</span><span class="identifier">__T</span><span class="special">(</span><span class="string">"\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"</span><span class="special">));</span> +<span class="keyword">const</span> <span class="identifier">CString</span> <span class="identifier">human_format</span> <span class="special">=</span> <span class="identifier">__T</span><span class="special">(</span><span class="string">"$1-$2-$3-$4"</span><span class="special">);</span> + +<span class="identifier">CString</span> <span class="identifier">human_readable_card_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">CString</span><span class="special">&</span> <span class="identifier">s</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">human_format</span><span class="special">);</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mfc_regex_create.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_iter.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_intro.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_intro.html new file mode 100644 index 0000000000..fcb67178fa --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_intro.html @@ -0,0 +1,65 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Introduction to Boost.Regex and MFC Strings</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../mfc_strings.html" title="Using Boost Regex With MFC Strings"> +<link rel="prev" href="../mfc_strings.html" title="Using Boost Regex With MFC Strings"> +<link rel="next" href="mfc_regex_types.html" title="Regex Types Used With MFC Strings"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_regex_types.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_intro"></a><a class="link" href="mfc_intro.html" title="Introduction to Boost.Regex and MFC Strings">Introduction + to Boost.Regex and MFC Strings</a> +</h5></div></div></div> +<p> + The header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">mfc</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> provides Boost.Regex support for + MFC string types: note that this support requires Visual Studio .NET + (Visual C++ 7) or later, where all of the MFC and ATL string types are + based around the CSimpleStringT class template. + </p> +<p> + In the following documentation, whenever you see CSimpleStringT<charT>, + then you can substitute any of the following MFC/ATL types (all of which + inherit from CSimpleStringT): + </p> +<pre class="programlisting"><span class="identifier">CString</span> +<span class="identifier">CStringA</span> +<span class="identifier">CStringW</span> +<span class="identifier">CAtlString</span> +<span class="identifier">CAtlStringA</span> +<span class="identifier">CAtlStringW</span> +<span class="identifier">CStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span><span class="identifier">traits</span><span class="special">></span> +<span class="identifier">CFixedStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span><span class="identifier">N</span><span class="special">></span> +<span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_regex_types.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html new file mode 100644 index 0000000000..370af74fc0 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html @@ -0,0 +1,150 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Iterating Over the Matches Within An MFC String</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../mfc_strings.html" title="Using Boost Regex With MFC Strings"> +<link rel="prev" href="mfc_algo.html" title="Overloaded Algorithms For MFC String Types"> +<link rel="next" href="../../posix.html" title="POSIX Compatible C API's"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mfc_algo.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../posix.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter"></a><a class="link" href="mfc_iter.html" title="Iterating Over the Matches Within An MFC String">Iterating + Over the Matches Within An MFC String</a> +</h5></div></div></div> +<p> + The following helper functions are provided to ease the conversion from + an MFC/ATL string to a <a class="link" href="../../regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> or <a class="link" href="../../regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a>: + </p> +<h5> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.h0"></a> + <span><a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_iterator_creation_helper"></a></span><a class="link" href="mfc_iter.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_iterator_creation_helper">regex_iterator + creation helper</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">regex_iterator</span><span class="special"><</span><span class="identifier">charT</span> <span class="keyword">const</span><span class="special">*></span> + <span class="identifier">make_regex_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">regex_iterator</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> + <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">);</span></code> + </p> +<p> + <span class="bold"><strong>Example</strong></span>: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">enumerate_links</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">CString</span><span class="special">&</span> <span class="identifier">html</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// enumerate and print all the links in some HTML text,</span> + <span class="comment">// the expression used is by Andew Lee on www.regxlib.com:</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tregex</span> <span class="identifier">r</span><span class="special">(</span> + <span class="identifier">__T</span><span class="special">(</span><span class="string">"href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+"</span> + <span class="string">"(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*"</span> + <span class="string">"(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']"</span><span class="special">));</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tregex_iterator</span> <span class="identifier">i</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_regex_iterator</span><span class="special">(</span><span class="identifier">html</span><span class="special">,</span> <span class="identifier">r</span><span class="special">)),</span> <span class="identifier">j</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">(*</span><span class="identifier">i</span><span class="special">)[</span><span class="number">1</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">++</span><span class="identifier">i</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +<h5> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.h1"></a> + <span><a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_token_iterator_creation_helpers"></a></span><a class="link" href="mfc_iter.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_token_iterator_creation_helpers">regex_token_iterator + creation helpers</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="identifier">charT</span> <span class="keyword">const</span><span class="special">*></span> + <span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">sub</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">regex_token_iterator</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> + <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">sub</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">);</span></code> + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="identifier">charT</span> <span class="keyword">const</span><span class="special">*></span> + <span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">subs</span><span class="special">,</span> + <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">regex_token_iterator</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> + <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">subs</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">);</span></code> + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="identifier">charT</span> <span class="keyword">const</span><span class="special">*></span> + <span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span> <span class="identifier">subs</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">regex_token_iterator</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> + <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">subs</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">);</span></code> + </p> +<p> + <span class="bold"><strong>Example</strong></span>: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">enumerate_links2</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">CString</span><span class="special">&</span> <span class="identifier">html</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// enumerate and print all the links in some HTML text,</span> + <span class="comment">// the expression used is by Andew Lee on www.regxlib.com:</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tregex</span> <span class="identifier">r</span><span class="special">(</span> + <span class="identifier">__T</span><span class="special">(</span><span class="string">"href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+"</span> + <span class="string">"(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*"</span> + <span class="string">"(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']"</span><span class="special">));</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tregex_token_iterator</span> <span class="identifier">i</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_regex_token_iterator</span><span class="special">(</span><span class="identifier">html</span><span class="special">,</span> <span class="identifier">r</span><span class="special">,</span> <span class="number">1</span><span class="special">)),</span> <span class="identifier">j</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">*</span><span class="identifier">i</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">++</span><span class="identifier">i</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mfc_algo.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../posix.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_create.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_create.html new file mode 100644 index 0000000000..76589fc314 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_create.html @@ -0,0 +1,57 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Regular Expression Creation From an MFC String</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../mfc_strings.html" title="Using Boost Regex With MFC Strings"> +<link rel="prev" href="mfc_regex_types.html" title="Regex Types Used With MFC Strings"> +<link rel="next" href="mfc_algo.html" title="Overloaded Algorithms For MFC String Types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mfc_regex_types.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_algo.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_regex_create"></a><a class="link" href="mfc_regex_create.html" title="Regular Expression Creation From an MFC String">Regular + Expression Creation From an MFC String</a> +</h5></div></div></div> +<p> + The following helper function is available to assist in the creation + of a regular expression from an MFC/ATL string type: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> + <span class="identifier">make_regex</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ATL</span><span class="special">::</span><span class="identifier">CSimpleStringT</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">syntax_option_type</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">normal</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetString</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> + <span class="identifier">f</span><span class="special">);</span></code> + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mfc_regex_types.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_algo.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_types.html b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_types.html new file mode 100644 index 0000000000..30fc6a349b --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_types.html @@ -0,0 +1,58 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Regex Types Used With MFC Strings</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../../index.html" title="Boost.Regex"> +<link rel="up" href="../mfc_strings.html" title="Using Boost Regex With MFC Strings"> +<link rel="prev" href="mfc_intro.html" title="Introduction to Boost.Regex and MFC Strings"> +<link rel="next" href="mfc_regex_create.html" title="Regular Expression Creation From an MFC String"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mfc_intro.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_regex_create.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_regex_types"></a><a class="link" href="mfc_regex_types.html" title="Regex Types Used With MFC Strings">Regex + Types Used With MFC Strings</a> +</h5></div></div></div> +<p> + The following typedefs are provided for the convenience of those working + with TCHAR's: + </p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">TCHAR</span><span class="special">></span> <span class="identifier">tregex</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">TCHAR</span> <span class="keyword">const</span><span class="special">*></span> <span class="identifier">tmatch</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special"><</span><span class="identifier">TCHAR</span> <span class="keyword">const</span><span class="special">*></span> <span class="identifier">tregex_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="identifier">TCHAR</span> <span class="keyword">const</span><span class="special">*></span> <span class="identifier">tregex_token_iterator</span><span class="special">;</span> +</pre> +<p> + If you are working with explicitly narrow or wide characters rather than + TCHAR, then use the regular Boost.Regex types <code class="computeroutput"><span class="identifier">regex</span></code> + and <code class="computeroutput"><span class="identifier">wregex</span></code> instead. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mfc_intro.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../mfc_strings.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="mfc_regex_create.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/posix.html b/libs/regex/doc/html/boost_regex/ref/posix.html new file mode 100644 index 0000000000..b9fdf3e818 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/posix.html @@ -0,0 +1,553 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>POSIX Compatible C API's</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="non_std_strings/mfc_strings/mfc_iter.html" title="Iterating Over the Matches Within An MFC String"> +<link rel="next" href="concepts.html" title="Concepts"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="non_std_strings/mfc_strings/mfc_iter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="concepts.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.posix"></a><a class="link" href="posix.html" title="POSIX Compatible C API's">POSIX Compatible C API's</a> +</h3></div></div></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + this is an abridged reference to the POSIX API functions, these are provided + for compatibility with other libraries, rather than as an API to be used + in new code (unless you need access from a language other than C++). This + version of these functions should also happily coexist with other versions, + as the names used are macros that expand to the actual function names. + </p></td></tr> +</table></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cregex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + or: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span> +</pre> +<p> + The following functions are available for users who need a POSIX compatible + C library, they are available in both Unicode and narrow character versions, + the standard POSIX API names are macros that expand to one version or the + other depending upon whether UNICODE is defined or not. + </p> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + Note that all the symbols defined here are enclosed inside namespace <code class="computeroutput"><span class="identifier">boost</span></code> when used in C++ programs, unless + you use <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> + instead - in which case the symbols are still defined in namespace boost, + but are made available in the global namespace as well. + </p></td></tr> +</table></div> +<p> + The functions are defined as: + </p> +<pre class="programlisting"><span class="keyword">extern</span> <span class="string">"C"</span> <span class="special">{</span> + +<span class="keyword">struct</span> <span class="identifier">regex_tA</span><span class="special">;</span> +<span class="keyword">struct</span> <span class="identifier">regex_tW</span><span class="special">;</span> + +<span class="keyword">int</span> <span class="identifier">regcompA</span><span class="special">(</span><span class="identifier">regex_tA</span><span class="special">*,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">regerrorA</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">regex_tA</span><span class="special">*,</span> <span class="keyword">char</span><span class="special">*,</span> <span class="keyword">unsigned</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">int</span> <span class="identifier">regexecA</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_tA</span><span class="special">*,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*,</span> <span class="keyword">unsigned</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">regmatch_t</span><span class="special">*,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">void</span> <span class="identifier">regfreeA</span><span class="special">(</span><span class="identifier">regex_tA</span><span class="special">*);</span> + +<span class="keyword">int</span> <span class="identifier">regcompW</span><span class="special">(</span><span class="identifier">regex_tW</span><span class="special">*,</span> <span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">regerrorW</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">regex_tW</span><span class="special">*,</span> <span class="keyword">wchar_t</span><span class="special">*,</span> <span class="keyword">unsigned</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">int</span> <span class="identifier">regexecW</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_tW</span><span class="special">*,</span> <span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*,</span> <span class="keyword">unsigned</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">regmatch_t</span><span class="special">*,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">void</span> <span class="identifier">regfreeW</span><span class="special">(</span><span class="identifier">regex_tW</span><span class="special">*);</span> + +<span class="preprocessor">#ifdef</span> <span class="identifier">UNICODE</span> +<span class="preprocessor">#define</span> <span class="identifier">regcomp</span> <span class="identifier">regcompW</span> +<span class="preprocessor">#define</span> <span class="identifier">regerror</span> <span class="identifier">regerrorW</span> +<span class="preprocessor">#define</span> <span class="identifier">regexec</span> <span class="identifier">regexecW</span> +<span class="preprocessor">#define</span> <span class="identifier">regfree</span> <span class="identifier">regfreeW</span> +<span class="preprocessor">#define</span> <span class="identifier">regex_t</span> <span class="identifier">regex_tW</span> +<span class="preprocessor">#else</span> +<span class="preprocessor">#define</span> <span class="identifier">regcomp</span> <span class="identifier">regcompA</span> +<span class="preprocessor">#define</span> <span class="identifier">regerror</span> <span class="identifier">regerrorA</span> +<span class="preprocessor">#define</span> <span class="identifier">regexec</span> <span class="identifier">regexecA</span> +<span class="preprocessor">#define</span> <span class="identifier">regfree</span> <span class="identifier">regfreeA</span> +<span class="preprocessor">#define</span> <span class="identifier">regex_t</span> <span class="identifier">regex_tA</span> +<span class="preprocessor">#endif</span> +<span class="special">}</span> +</pre> +<p> + All the functions operate on structure regex_t, which exposes two public + members: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Member + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span> + <span class="identifier">re_nsub</span></code> + </p> + </td> +<td> + <p> + This is filled in by <code class="computeroutput"><span class="identifier">regcomp</span></code> + and indicates the number of sub-expressions contained in the regular + expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">TCHAR</span><span class="special">*</span> <span class="identifier">re_endp</span></code> + </p> + </td> +<td> + <p> + Points to the end of the expression to compile when the flag REG_PEND + is set. + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + <code class="computeroutput"><span class="identifier">regex_t</span></code> is actually a + <code class="computeroutput"><span class="preprocessor">#define</span></code> - it is either + <code class="computeroutput"><span class="identifier">regex_tA</span></code> or <code class="computeroutput"><span class="identifier">regex_tW</span></code> depending upon whether <code class="computeroutput"><span class="identifier">UNICODE</span></code> is defined or not, <code class="computeroutput"><span class="identifier">TCHAR</span></code> is either <code class="computeroutput"><span class="keyword">char</span></code> + or <code class="computeroutput"><span class="keyword">wchar_t</span></code> again depending + upon the macro <code class="computeroutput"><span class="identifier">UNICODE</span></code>. + </p></td></tr> +</table></div> +<a name="regcomp"></a><h5> +<a name="boost_regex.ref.posix.h0"></a> + <span><a name="boost_regex.ref.posix.regcomp"></a></span><a class="link" href="posix.html#boost_regex.ref.posix.regcomp">regcomp</a> + </h5> +<p> + <code class="computeroutput"><span class="identifier">regcomp</span></code> takes a pointer to + a <code class="computeroutput"><span class="identifier">regex_t</span></code>, a pointer to the + expression to compile and a flags parameter which can be a combination of: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Flag + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + REG_EXTENDED + </p> + </td> +<td> + <p> + Compiles modern regular expressions. Equivalent to <code class="computeroutput"><span class="identifier">regbase</span><span class="special">::</span><span class="identifier">char_classes</span> <span class="special">|</span> + <span class="identifier">regbase</span><span class="special">::</span><span class="identifier">intervals</span> <span class="special">|</span> + <span class="identifier">regbase</span><span class="special">::</span><span class="identifier">bk_refs</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_BASIC + </p> + </td> +<td> + <p> + Compiles basic (obsolete) regular expression syntax. Equivalent + to <code class="computeroutput"><span class="identifier">regbase</span><span class="special">::</span><span class="identifier">char_classes</span> <span class="special">|</span> + <span class="identifier">regbase</span><span class="special">::</span><span class="identifier">intervals</span> <span class="special">|</span> + <span class="identifier">regbase</span><span class="special">::</span><span class="identifier">limited_ops</span> <span class="special">|</span> + <span class="identifier">regbase</span><span class="special">::</span><span class="identifier">bk_braces</span> <span class="special">|</span> + <span class="identifier">regbase</span><span class="special">::</span><span class="identifier">bk_parens</span> <span class="special">|</span> + <span class="identifier">regbase</span><span class="special">::</span><span class="identifier">bk_refs</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_NOSPEC + </p> + </td> +<td> + <p> + All characters are ordinary, the expression is a literal string. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_ICASE + </p> + </td> +<td> + <p> + Compiles for matching that ignores character case. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_NOSUB + </p> + </td> +<td> + <p> + Has no effect in this library. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_NEWLINE + </p> + </td> +<td> + <p> + When this flag is set a dot does not match the newline character. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_PEND + </p> + </td> +<td> + <p> + When this flag is set the re_endp parameter of the regex_t structure + must point to the end of the regular expression to compile. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_NOCOLLATE + </p> + </td> +<td> + <p> + When this flag is set then locale dependent collation for character + ranges is turned off. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_ESCAPE_IN_LISTS + </p> + </td> +<td> + <p> + When this flag is set, then escape sequences are permitted in bracket + expressions (character sets). + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_NEWLINE_ALT + </p> + </td> +<td> + <p> + When this flag is set then the newline character is equivalent + to the alternation operator |. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_PERL + </p> + </td> +<td> + <p> + Compiles Perl like regular expressions. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_AWK + </p> + </td> +<td> + <p> + A shortcut for awk-like behavior: <code class="computeroutput"><span class="identifier">REG_EXTENDED</span> + <span class="special">|</span> <span class="identifier">REG_ESCAPE_IN_LISTS</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_GREP + </p> + </td> +<td> + <p> + A shortcut for grep like behavior: <code class="computeroutput"><span class="identifier">REG_BASIC</span> + <span class="special">|</span> <span class="identifier">REG_NEWLINE_ALT</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_EGREP + </p> + </td> +<td> + <p> + A shortcut for egrep like behavior: <code class="computeroutput"><span class="identifier">REG_EXTENDED</span> + <span class="special">|</span> <span class="identifier">REG_NEWLINE_ALT</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<a name="regerror"></a><h5> +<a name="boost_regex.ref.posix.h1"></a> + <span><a name="boost_regex.ref.posix.regerror"></a></span><a class="link" href="posix.html#boost_regex.ref.posix.regerror">regerror</a> + </h5> +<p> + regerror takes the following parameters, it maps an error code to a human + readable string: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + int code + </p> + </td> +<td> + <p> + The error code. + </p> + </td> +</tr> +<tr> +<td> + <p> + const regex_t* e + </p> + </td> +<td> + <p> + The regular expression (can be null). + </p> + </td> +</tr> +<tr> +<td> + <p> + char* buf + </p> + </td> +<td> + <p> + The buffer to fill in with the error message. + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned int buf_size + </p> + </td> +<td> + <p> + The length of buf. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + If the error code is OR'ed with REG_ITOA then the message that results is + the printable name of the code rather than a message, for example "REG_BADPAT". + If the code is REG_ATIO then e must not be null and e->re_pend must point + to the printable name of an error code, the return value is then the value + of the error code. For any other value of code, the return value is the number + of characters in the error message, if the return value is greater than or + equal to buf_size then regerror will have to be called again with a larger + buffer. + </p> +<a name="regexec"></a><h5> +<a name="boost_regex.ref.posix.h2"></a> + <span><a name="boost_regex.ref.posix.regexec"></a></span><a class="link" href="posix.html#boost_regex.ref.posix.regexec">regexec</a> + </h5> +<p> + regexec finds the first occurrence of expression e within string buf. If + len is non-zero then <span class="emphasis"><em>*m</em></span> is filled in with what matched + the regular expression, m[0] contains what matched the whole string, m[1] + the first sub-expression etc, see regmatch_t in the header file declaration + for more details. The eflags parameter can be a combination of: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Flag + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + REG_NOTBOL + </p> + </td> +<td> + <p> + Parameter buf does not represent the start of a line. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_NOTEOL + </p> + </td> +<td> + <p> + Parameter buf does not terminate at the end of a line. + </p> + </td> +</tr> +<tr> +<td> + <p> + REG_STARTEND + </p> + </td> +<td> + <p> + The string searched starts at buf + pmatch[0].rm_so and ends at + buf + pmatch[0].rm_eo. + </p> + </td> +</tr> +</tbody> +</table></div> +<a name="regfree"></a><h5> +<a name="boost_regex.ref.posix.h3"></a> + <span><a name="boost_regex.ref.posix.regfree"></a></span><a class="link" href="posix.html#boost_regex.ref.posix.regfree">regfree</a> + </h5> +<p> + <code class="computeroutput"><span class="identifier">regfree</span></code> frees all the memory + that was allocated by regcomp. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="non_std_strings/mfc_strings/mfc_iter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="concepts.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/regex_iterator.html b/libs/regex/doc/html/boost_regex/ref/regex_iterator.html new file mode 100644 index 0000000000..b8c1b75102 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/regex_iterator.html @@ -0,0 +1,530 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_iterator</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="regex_replace.html" title="regex_replace"> +<link rel="next" href="regex_token_iterator.html" title="regex_token_iterator"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_replace.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_token_iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.regex_iterator"></a><a class="link" href="regex_iterator.html" title="regex_iterator">regex_iterator</a> +</h3></div></div></div> +<p> + The iterator type <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> will enumerate all + of the regular expression matches found in some sequence: dereferencing a + <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> + yields a reference to a <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> object. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">charT</span> <span class="special">=</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">traits</span> <span class="special">=</span> <span class="identifier">regex_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">regex_iterator</span> +<span class="special">{</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> <span class="identifier">regex_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="identifier">value_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">difference_type</span> <span class="identifier">difference_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <span class="identifier">reference</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward_iterator_tag</span> <span class="identifier">iterator_category</span><span class="special">;</span> + + <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.construct1">regex_iterator</a><span class="special">();</span> + <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.construct2">regex_iterator</a><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&</span> <span class="identifier">re</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.construct3">regex_iterator</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&);</span> + <span class="identifier">regex_iterator</span><span class="special">&</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.assign">operator=(</a><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&);</span> + <span class="keyword">bool</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_eq">operator==</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">bool</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_ne">operator!=</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_deref">operator*</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_arrow">operator-></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="identifier">regex_iterator</span><span class="special">&</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_inc">operator++</a><span class="special">();</span> + <span class="identifier">regex_iterator</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_inc2">operator++</a><span class="special">(</span><span class="keyword">int</span><span class="special">);</span> +<span class="special">};</span> + +<span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> <span class="identifier">cregex_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">sregex_iterator</span><span class="special">;</span> + +<span class="preprocessor">#ifndef</span> <span class="identifier">BOOST_NO_WREGEX</span> +<span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> <span class="identifier">wcregex_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">wsregex_iterator</span><span class="special">;</span> +<span class="preprocessor">#endif</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> <span class="identifier">regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.make">make_regex_iterator</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> + <span class="identifier">regex_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.make">make_regex_iterator</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<h5> +<a name="boost_regex.ref.regex_iterator.h0"></a> + <span><a name="boost_regex.ref.regex_iterator.description"></a></span><a class="link" href="regex_iterator.html#boost_regex.ref.regex_iterator.description">Description</a> + </h5> +<p> + A <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> + is constructed from a pair of iterators, and enumerates all occurrences of + a regular expression within that iterator range. + </p> +<a name="boost_regex.regex_iterator.construct1"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">();</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs an end of sequence + <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>. + </p> +<a name="boost_regex.regex_iterator.construct2"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&</span> <span class="identifier">re</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> that will enumerate + all occurrences of the expression <span class="emphasis"><em>re</em></span>, within the sequence + [a,b), and found using <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>m</em></span>. + The object <span class="emphasis"><em>re</em></span> must exist for the lifetime of the <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<a name="boost_regex.regex_iterator.construct3"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs a copy of <code class="computeroutput"><span class="identifier">that</span></code>. + </p> +<p> + <span class="bold"><strong>Postconditions</strong></span>: <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">==</span> <span class="identifier">that</span></code>. + </p> +<a name="boost_regex.regex_iterator.assign"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: sets <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> equal to those in <code class="computeroutput"><span class="identifier">that</span></code>. + </p> +<p> + <span class="bold"><strong>Postconditions</strong></span>: *this == that. + </p> +<a name="boost_regex.regex_iterator.op_eq"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&</span> <span class="identifier">that</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns true if *this is equal + to that. + </p> +<a name="boost_regex.regex_iterator.op_ne"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">!(*</span><span class="keyword">this</span> <span class="special">==</span> <span class="identifier">that</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.regex_iterator.op_deref"></a><pre class="programlisting"><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">*()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: dereferencing a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> object it yields + a const reference to a <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> object, whose members + are set as follows: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">re</span><span class="special">.</span><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + The end of the last match found, or the start of the underlying + sequence if this is the first match enumerated + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">last</span></code> + </p> + </td> +<td> + <p> + The same as the start of the match found: <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + True if the prefix did not match an empty string: <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">first</span> + <span class="special">!=</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">second</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + The same as the end of the match found: <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">second</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">last</span></code> + </p> + </td> +<td> + <p> + The end of the underlying sequence. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + True if the suffix did not match an empty string: <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">first</span> + <span class="special">!=</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">second</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + The start of the sequence of characters that matched the regular + expression + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">second</span></code> + </p> + </td> +<td> + <p> + The end of the sequence of characters that matched the regular + expression + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + true if a full match was found, and false if it was a partial match + (found as a result of the match_partial flag being set). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>, + the start of the sequence that matched sub-expression <span class="emphasis"><em>n</em></span>. + Alternatively, if sub-expression <span class="emphasis"><em>n</em></span> did not + participate in the match, then last. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">second</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>, + the end of the sequence that matched sub-expression <span class="emphasis"><em>n</em></span>. + Alternatively, if sub-expression <span class="emphasis"><em>n</em></span> did not + participate in the match, then last. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>, + true if sub-expression <span class="emphasis"><em>n</em></span> participated in the + match, false otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">position</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>, + then the distance from the start of the underlying sequence to + the start of sub-expression match <span class="emphasis"><em>n</em></span>. + </p> + </td> +</tr> +</tbody> +</table></div> +<a name="boost_regex.regex_iterator.op_arrow"></a><pre class="programlisting"><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">->()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">&(*</span><span class="keyword">this</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.regex_iterator.op_inc"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: moves the iterator to the next + match in the underlying sequence, or the end of sequence iterator if none + if found. When the last match found matched a zero length string, then the + <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> + will find the next match as follows: if there exists a non-zero length match + that starts at the same location as the last one, then returns it, otherwise + starts looking for the next (possibly zero length) match from one position + to the right of the last match. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<p> + <span class="bold"><strong>Returns</strong></span>: *this. + </p> +<a name="boost_regex.regex_iterator.op_inc2"></a><pre class="programlisting"><span class="identifier">regex_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs a copy result of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>, then + calls <code class="computeroutput"><span class="special">++(*</span><span class="keyword">this</span><span class="special">)</span></code>. + </p> +<p> + <span class="bold"><strong>Returns</strong></span>: result. + </p> +<a name="boost_regex.regex_iterator.make"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="identifier">regex_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <span class="identifier">make_regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> +<span class="identifier">regex_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <span class="identifier">make_regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns an iterator that enumerates + all occurences of expression <span class="emphasis"><em>e</em></span> in text <span class="emphasis"><em>p</em></span> + using <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> + <span class="emphasis"><em>m</em></span>. + </p> +<h5> +<a name="boost_regex.ref.regex_iterator.h1"></a> + <span><a name="boost_regex.ref.regex_iterator.examples"></a></span><a class="link" href="regex_iterator.html#boost_regex.ref.regex_iterator.examples">Examples</a> + </h5> +<p> + The following example takes a C++ source file and builds up an index of class + names, and the location of that class in the file. + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">map</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">fstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">;</span> + +<span class="comment">// purpose:</span> +<span class="comment">// takes the contents of a file in the form of a string</span> +<span class="comment">// and searches for all the C++ class definitions, storing</span> +<span class="comment">// their locations in a map of strings/int's</span> + +<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">difference_type</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">map_type</span><span class="special">;</span> + +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">re</span> <span class="special">=</span> + <span class="comment">// possibly leading whitespace: </span> + <span class="string">"^[[:space:]]*"</span> + <span class="comment">// possible template declaration:</span> + <span class="string">"(template[[:space:]]*<[^;:{]+>[[:space:]]*)?"</span> + <span class="comment">// class or struct:</span> + <span class="string">"(class|struct)[[:space:]]*"</span> + <span class="comment">// leading declspec macros etc:</span> + <span class="string">"("</span> + <span class="string">"\\<\\w+\\>"</span> + <span class="string">"("</span> + <span class="string">"[[:blank:]]*\\([^)]*\\)"</span> + <span class="string">")?"</span> + <span class="string">"[[:space:]]*"</span> + <span class="string">")*"</span> + <span class="comment">// the class name</span> + <span class="string">"(\\<\\w*\\>)[[:space:]]*"</span> + <span class="comment">// template specialisation parameters</span> + <span class="string">"(<[^;:{]+>)?[[:space:]]*"</span> + <span class="comment">// terminate in { or :</span> + <span class="string">"(\\{|:[^;\\{()]*\\{)"</span><span class="special">;</span> + + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">expression</span><span class="special">(</span><span class="identifier">re</span><span class="special">);</span> +<span class="identifier">map_type</span> <span class="identifier">class_index</span><span class="special">;</span> + +<span class="keyword">bool</span> <span class="identifier">regex_callback</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">>&</span> <span class="identifier">what</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// what[0] contains the whole string</span> + <span class="comment">// what[5] contains the class name.</span> + <span class="comment">// what[6] contains the template specialisation if any.</span> + <span class="comment">// add class name and position to map:</span> + <span class="identifier">class_index</span><span class="special">[</span><span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">str</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">str</span><span class="special">()]</span> <span class="special">=</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">position</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> + <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span> +<span class="special">}</span> + +<span class="keyword">void</span> <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">erase</span><span class="special">();</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">rdbuf</span><span class="special">()-></span><span class="identifier">in_avail</span><span class="special">());</span> + <span class="keyword">char</span> <span class="identifier">c</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">c</span><span class="special">))</span> + <span class="special">{</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">())</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">*</span> <span class="number">3</span><span class="special">);</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">append</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">**</span> <span class="identifier">argv</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">text</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">argc</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Processing file "</span> <span class="special"><<</span> <span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ifstream</span> <span class="identifier">fs</span><span class="special">(</span><span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span> + <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">text</span><span class="special">,</span> <span class="identifier">fs</span><span class="special">);</span> + <span class="comment">// construct our iterators:</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_iterator</span> <span class="identifier">m1</span><span class="special">(</span><span class="identifier">text</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">text</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">expression</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_iterator</span> <span class="identifier">m2</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">m1</span><span class="special">,</span> <span class="identifier">m2</span><span class="special">,</span> <span class="special">&</span><span class="identifier">regex_callback</span><span class="special">);</span> + <span class="comment">// copy results:</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> <span class="special"><<</span> <span class="string">" matches found"</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">map_type</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">d</span><span class="special">;</span> + <span class="identifier">c</span> <span class="special">=</span> <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> + <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">c</span> <span class="special">!=</span> <span class="identifier">d</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"class \""</span> <span class="special"><<</span> <span class="special">(*</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">first</span> <span class="special"><<</span> <span class="string">"\" found at index: "</span> <span class="special"><<</span> <span class="special">(*</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">second</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> + <span class="special">++</span><span class="identifier">c</span><span class="special">;</span> + <span class="special">}</span> + <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">class_index</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span> + <span class="special">}</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_replace.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_token_iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/regex_match.html b/libs/regex/doc/html/boost_regex/ref/regex_match.html new file mode 100644 index 0000000000..0c1cb68a4a --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/regex_match.html @@ -0,0 +1,415 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_match</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="sub_match.html" title="sub_match"> +<link rel="next" href="regex_search.html" title="regex_search"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="sub_match.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_search.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.regex_match"></a><a class="link" href="regex_match.html" title="regex_match">regex_match</a> +</h3></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The algorithm <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> + determines whether a given regular expression matches <span class="bold"><strong>all</strong></span> + of a given character sequence denoted by a pair of bidirectional-iterators, + the algorithm is defined as follows, the main use of this function is data + input validation. + </p> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + Note that the result is true only if the expression matches the <span class="bold"><strong>whole</strong></span> of the input sequence. If you want to search + for an expression somewhere within the sequence then use <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a>. If you want to match + a prefix of the character string then use <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> with the flag match_continuous + set. + </p></td></tr> +</table></div> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<h5> +<a name="boost_regex.ref.regex_match.h0"></a> + <span><a name="boost_regex.ref.regex_match.description"></a></span><a class="link" href="regex_match.html#boost_regex.ref.regex_match.description">Description</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: Type BidirectionalIterator meets + the requirements of a Bidirectional Iterator (24.1.4). + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Determines whether there is an + exact match between the regular expression <span class="emphasis"><em>e</em></span>, and all + of the character sequence [first, last), parameter <span class="emphasis"><em>flags</em></span> + (see <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>) + is used to control how the expression is matched against the character sequence. + Returns true if such a match exists, false otherwise. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<p> + <span class="bold"><strong>Postconditions</strong></span>: If the function returns + false, then the effect on parameter <span class="emphasis"><em>m</em></span> is undefined, + otherwise the effects on parameter <span class="emphasis"><em>m</em></span> are given in the + table: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">e</span><span class="special">.</span><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">first</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">last</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">first</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">last</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">last</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">last</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">first</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">second</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">last</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + true if a full match was found, and false if it was a partial match + (found as a result of the match_partial flag being set). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>, the start of the sequence that + matched sub-expression <span class="emphasis"><em>n</em></span>. Alternatively, if + sub-expression <span class="emphasis"><em>n</em></span> did not participate in the + match, then <code class="computeroutput"><span class="identifier">last</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">second</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>, the end of the sequence that + matched sub-expression <span class="emphasis"><em>n</em></span>. Alternatively, if + sub-expression <span class="emphasis"><em>n</em></span> did not participate in the + match, then <code class="computeroutput"><span class="identifier">last</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>, true if sub-expression <span class="emphasis"><em>n</em></span> + participated in the match, false otherwise. + </p> + </td> +</tr> +</tbody> +</table></div> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Behaves "as if" by constructing + an instance of <code class="computeroutput"><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="identifier">what</span></code>, + and then returning the result of <code class="computeroutput"><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">str</span><span class="special">,</span> <span class="identifier">str</span> + <span class="special">+</span> <span class="identifier">char_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">str</span><span class="special">),</span> + <span class="identifier">m</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">m</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">str</span><span class="special">,</span> <span class="identifier">str</span> + <span class="special">+</span> <span class="identifier">char_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">str</span><span class="special">),</span> + <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_match</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span> <span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<h5> +<a name="boost_regex.ref.regex_match.h1"></a> + <span><a name="boost_regex.ref.regex_match.examples"></a></span><a class="link" href="regex_match.html#boost_regex.ref.regex_match.examples">Examples</a> + </h5> +<p> + The following example processes an ftp response: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">stdlib</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">;</span> + +<span class="identifier">regex</span> <span class="identifier">expression</span><span class="special">(</span><span class="string">"([0-9]+)(\\-| |$)(.*)"</span><span class="special">);</span> + +<span class="comment">// process_ftp: </span> +<span class="comment">// on success returns the ftp response code, and fills </span> +<span class="comment">// msg with the ftp response message. </span> +<span class="keyword">int</span> <span class="identifier">process_ftp</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">response</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">*</span> <span class="identifier">msg</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">cmatch</span> <span class="identifier">what</span><span class="special">;</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">response</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">expression</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// what[0] contains the whole string </span> + <span class="comment">// what[1] contains the response code </span> + <span class="comment">// what[2] contains the separator character </span> + <span class="comment">// what[3] contains the text message. </span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">msg</span><span class="special">)</span> + <span class="identifier">msg</span><span class="special">-></span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">3</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">3</span><span class="special">].</span><span class="identifier">second</span><span class="special">);</span> + <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">atoi</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">1</span><span class="special">].</span><span class="identifier">first</span><span class="special">);</span> + <span class="special">}</span> + <span class="comment">// failure did not match </span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">msg</span><span class="special">)</span> + <span class="identifier">msg</span><span class="special">-></span><span class="identifier">erase</span><span class="special">();</span> + <span class="keyword">return</span> <span class="special">-</span><span class="number">1</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="sub_match.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_search.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/regex_replace.html b/libs/regex/doc/html/boost_regex/ref/regex_replace.html new file mode 100644 index 0000000000..fb21188a3f --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/regex_replace.html @@ -0,0 +1,332 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_replace</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="regex_search.html" title="regex_search"> +<link rel="next" href="regex_iterator.html" title="regex_iterator"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_search.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.regex_replace"></a><a class="link" href="regex_replace.html" title="regex_replace">regex_replace</a> +</h3></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The algorithm <a class="link" href="regex_replace.html" title="regex_replace"><code class="computeroutput"><span class="identifier">regex_replace</span></code></a> searches through a + string finding all the matches to the regular expression: for each match + it then calls <a class="link" href="match_results.html#boost_regex.match_results_format"><code class="computeroutput"><span class="identifier">match_results</span><span class="special"><>::</span><span class="identifier">format</span></code></a> to format the string and + sends the result to the output iterator. Sections of text that do not match + are copied to the output unchanged only if the <span class="emphasis"><em>flags</em></span> + parameter does not have the flag <code class="computeroutput"><span class="identifier">format_no_copy</span></code> + set. If the flag <code class="computeroutput"><span class="identifier">format_first_only</span></code> + is set then only the first occurrence is replaced rather than all occurrences. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> +<span class="identifier">OutputIterator</span> <span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> +<span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="identifier">regex_replace</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<h5> +<a name="boost_regex.ref.regex_replace.h0"></a> + <span><a name="boost_regex.ref.regex_replace.description"></a></span><a class="link" href="regex_replace.html#boost_regex.ref.regex_replace.description">Description</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> +<span class="identifier">OutputIterator</span> <span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + Enumerates all the occurences of expression <span class="emphasis"><em>e</em></span> in the + sequence [first, last), replacing each occurence with the string that results + by merging the match found with the format string <span class="emphasis"><em>fmt</em></span>, + and copies the resulting string to <span class="emphasis"><em>out</em></span>. In the case + that <span class="emphasis"><em>fmt</em></span> is a unary, binary or ternary function object, + then the character sequence generated by that object is copied unchanged + to the output when performing a substitution. + </p> +<p> + If the flag <code class="computeroutput"><span class="identifier">format_no_copy</span></code> + is set in <span class="emphasis"><em>flags</em></span> then unmatched sections of text are + not copied to output. + </p> +<p> + If the flag <code class="computeroutput"><span class="identifier">format_first_only</span></code> + is set in flags then only the first occurence of <span class="emphasis"><em>e</em></span> is + replaced. + </p> +<p> + The manner in which the format string <span class="emphasis"><em>fmt</em></span> is interpretted, + along with the rules used for finding matches, are determined by the flags + set in <span class="emphasis"><em>flags</em></span>: see <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>. + </p> +<p> + <span class="bold"><strong>Requires</strong></span> The type <code class="computeroutput"><span class="identifier">Formatter</span></code> + must be either a pointer to a null-terminated string of type <code class="computeroutput"><span class="identifier">char_type</span><span class="special">[]</span></code>, + or be a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s + (for example <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">></span></code>) + or be a unary, binary or ternary functor that computes the replacement string + from a function call: either <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(</span><span class="identifier">what</span><span class="special">)</span></code> + which must return a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s + to be used as the replacement text, or either <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(</span><span class="identifier">what</span><span class="special">,</span> + <span class="identifier">out</span><span class="special">)</span></code> + or <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(</span><span class="identifier">what</span><span class="special">,</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>, both of which write the replacement text + to <code class="computeroutput"><span class="special">*</span><span class="identifier">out</span></code>, + and then return the new OutputIterator position. In each case <code class="computeroutput"><span class="identifier">what</span></code> is the <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> object that represents + the match found. Note that if the formatter is a functor, then it is <span class="emphasis"><em>passed + by value</em></span>: users that want to pass function objects with internal + state might want to use <a href="../../../../../../doc/html/ref.html" target="_top">Boost.Ref</a> + to wrap the object so that it's passed by reference. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> object: + </p> +<pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">></span> + <span class="identifier">i</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">),</span> +</pre> +<p> + and uses <span class="emphasis"><em>i</em></span> to enumerate through all of the matches + <span class="emphasis"><em>m</em></span> of type <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> <code class="computeroutput"><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span></code> + that occur within the sequence [first, last). + </p> +<p> + If no such matches are found and + </p> +<pre class="programlisting"><span class="special">!(</span><span class="identifier">flags</span> <span class="special">&</span> <span class="identifier">format_no_copy</span><span class="special">)</span> +</pre> +<p> + then calls + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">out</span><span class="special">).</span> +</pre> +<p> + Otherwise, for each match found, if + </p> +<pre class="programlisting"><span class="special">!(</span><span class="identifier">flags</span> <span class="special">&</span> <span class="identifier">format_no_copy</span><span class="special">)</span> +</pre> +<p> + calls + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">last</span><span class="special">,</span> <span class="identifier">out</span><span class="special">),</span> +</pre> +<p> + and then calls + </p> +<pre class="programlisting"><span class="identifier">m</span><span class="special">.</span><span class="identifier">format</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">fmt</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">).</span> +</pre> +<p> + Finally if + </p> +<pre class="programlisting"><span class="special">!(</span><span class="identifier">flags</span> <span class="special">&</span> <span class="identifier">format_no_copy</span><span class="special">)</span> +</pre> +<p> + calls + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">last_m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last_m</span><span class="special">,</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">last</span><span class="special">,</span> <span class="identifier">out</span><span class="special">)</span> +</pre> +<p> + where <span class="emphasis"><em>last_m</em></span> is a copy of the last match found. + </p> +<p> + If <code class="computeroutput"><span class="identifier">flags</span> <span class="special">&</span> + <span class="identifier">format_first_only</span></code> is non-zero then + only the first match found is replaced. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<p> + <span class="bold"><strong>Returns</strong></span>: out. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span> +<span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="identifier">regex_replace</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">Formatter</span> <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span> The type <code class="computeroutput"><span class="identifier">Formatter</span></code> + must be either a pointer to a null-terminated string of type <code class="computeroutput"><span class="identifier">char_type</span><span class="special">[]</span></code>, + or be a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s + (for example <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">></span></code>) + or be a unary, binary or ternary functor that computes the replacement string + from a function call: either <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(</span><span class="identifier">what</span><span class="special">)</span></code> + which must return a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s + to be used as the replacement text, or either <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(</span><span class="identifier">what</span><span class="special">,</span> + <span class="identifier">out</span><span class="special">)</span></code> + or <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(</span><span class="identifier">what</span><span class="special">,</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>, both of which write the replacement text + to <code class="computeroutput"><span class="special">*</span><span class="identifier">out</span></code>, + and then return the new OutputIterator position. In each case <code class="computeroutput"><span class="identifier">what</span></code> is the <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> object that represents + the match found. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Constructs an object <code class="computeroutput"><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="identifier">result</span></code>, calls <code class="computeroutput"><span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">back_inserter</span><span class="special">(</span><span class="identifier">result</span><span class="special">),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">fmt</span><span class="special">,</span> + <span class="identifier">flags</span><span class="special">)</span></code>, + and then returns <code class="computeroutput"><span class="identifier">result</span></code>. + </p> +<h5> +<a name="boost_regex.ref.regex_replace.h1"></a> + <span><a name="boost_regex.ref.regex_replace.examples"></a></span><a class="link" href="regex_replace.html#boost_regex.ref.regex_replace.examples">Examples</a> + </h5> +<p> + The following example takes C/C++ source code as input, and outputs syntax + highlighted HTML code. + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">fstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">sstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iterator</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">fstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="comment">// purpose:</span> +<span class="comment">// takes the contents of a file and transform to</span> +<span class="comment">// syntax highlighted code in html format</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e1</span><span class="special">,</span> <span class="identifier">e2</span><span class="special">;</span> +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">expression_text</span><span class="special">;</span> +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">format_string</span><span class="special">;</span> +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">pre_expression</span><span class="special">;</span> +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">pre_format</span><span class="special">;</span> +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">header_text</span><span class="special">;</span> +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">footer_text</span><span class="special">;</span> + +<span class="keyword">void</span> <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">erase</span><span class="special">();</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">rdbuf</span><span class="special">()-></span><span class="identifier">in_avail</span><span class="special">());</span> + <span class="keyword">char</span> <span class="identifier">c</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">c</span><span class="special">))</span> + <span class="special">{</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">())</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">*</span> <span class="number">3</span><span class="special">);</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">append</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">**</span> <span class="identifier">argv</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">try</span><span class="special">{</span> + <span class="identifier">e1</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">expression_text</span><span class="special">);</span> + <span class="identifier">e2</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">pre_expression</span><span class="special">);</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">argc</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Processing file "</span> <span class="special"><<</span> <span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ifstream</span> <span class="identifier">fs</span><span class="special">(</span><span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">in</span><span class="special">;</span> + <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">in</span><span class="special">,</span> <span class="identifier">fs</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">out_name</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">])</span> <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="string">".htm"</span><span class="special">));</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ofstream</span> <span class="identifier">os</span><span class="special">(</span><span class="identifier">out_name</span><span class="special">.</span><span class="identifier">c_str</span><span class="special">());</span> + <span class="identifier">os</span> <span class="special"><<</span> <span class="identifier">header_text</span><span class="special">;</span> + <span class="comment">// strip '<' and '>' first by outputting to a</span> + <span class="comment">// temporary string stream</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostringstream</span> <span class="identifier">t</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios</span><span class="special">::</span><span class="identifier">out</span> <span class="special">|</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios</span><span class="special">::</span><span class="identifier">binary</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="keyword">char</span><span class="special">></span> <span class="identifier">oi</span><span class="special">(</span><span class="identifier">t</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">oi</span><span class="special">,</span> <span class="identifier">in</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">in</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="identifier">e2</span><span class="special">,</span> <span class="identifier">pre_format</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_default</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">format_all</span><span class="special">);</span> + <span class="comment">// then output to final output stream</span> + <span class="comment">// adding syntax highlighting:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">(</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">str</span><span class="special">());</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="keyword">char</span><span class="special">></span> <span class="identifier">out</span><span class="special">(</span><span class="identifier">os</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_replace</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="identifier">e1</span><span class="special">,</span> <span class="identifier">format_string</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_default</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">format_all</span><span class="special">);</span> + <span class="identifier">os</span> <span class="special"><<</span> <span class="identifier">footer_text</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">}</span> + <span class="keyword">catch</span><span class="special">(...)</span> + <span class="special">{</span> <span class="keyword">return</span> <span class="special">-</span><span class="number">1</span><span class="special">;</span> <span class="special">}</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> + +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">pre_expression</span> <span class="special">=</span> <span class="string">"(<)|(>)|(&)|\\r"</span><span class="special">;</span> +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">pre_format</span> <span class="special">=</span> <span class="string">"(?1&lt;)(?2&gt;)(?3&amp;)"</span><span class="special">;</span> + + +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">expression_text</span> <span class="special">=</span> + <span class="comment">// preprocessor directives: index 1</span> + <span class="string">"(^[[:blank:]]*#(?:[^\\\\\\n]|\\\\[^\\n[:punct:][:word:]]*[\\n[:punct:][:word:]])*)|"</span> + <span class="comment">// comment: index 2</span> + <span class="string">"(//[^\\n]*|/\\*.*?\\*/)|"</span> + <span class="comment">// literals: index 3</span> + <span class="string">"\\<([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\\.)?[[:digit:]]+"</span> + <span class="string">"(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\\>|"</span> + <span class="comment">// string literals: index 4</span> + <span class="string">"('(?:[^\\\\']|\\\\.)*'|\"(?:[^\\\\\"]|\\\\.)*\")|"</span> + <span class="comment">// keywords: index 5</span> + <span class="string">"\\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import"</span> + <span class="string">"|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall"</span> + <span class="string">"|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool"</span> + <span class="string">"|break|case|catch|cdecl|char|class|const|const_cast|continue|default|delete"</span> + <span class="string">"|do|double|dynamic_cast|else|enum|explicit|extern|false|float|for|friend|goto"</span> + <span class="string">"|if|inline|int|long|mutable|namespace|new|operator|pascal|private|protected"</span> + <span class="string">"|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_cast"</span> + <span class="string">"|struct|switch|template|this|throw|true|try|typedef|typeid|typename|union|unsigned"</span> + <span class="string">"|using|virtual|void|volatile|wchar_t|while)\\>"</span> + <span class="special">;</span> + +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">format_string</span> <span class="special">=</span> <span class="string">"(?1<font color=\"#008040\">$&</font>)"</span> + <span class="string">"(?2<I><font color=\"#000080\">$&</font></I>)"</span> + <span class="string">"(?3<font color=\"#0000A0\">$&</font>)"</span> + <span class="string">"(?4<font color=\"#0000FF\">$&</font>)"</span> + <span class="string">"(?5<B>$&</B>)"</span><span class="special">;</span> + +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">header_text</span> <span class="special">=</span> + <span class="string">"<HTML>\n<HEAD>\n"</span> + <span class="string">"<TITLE>Auto-generated html formated source</TITLE>\n"</span> + <span class="string">"<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1252\">\n"</span> + <span class="string">"</HEAD>\n"</span> + <span class="string">"<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n"</span> + <span class="string">"<P> </P>\n<PRE>"</span><span class="special">;</span> + +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">footer_text</span> <span class="special">=</span> <span class="string">"</PRE>\n</BODY>\n\n"</span><span class="special">;</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_search.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/regex_search.html b/libs/regex/doc/html/boost_regex/ref/regex_search.html new file mode 100644 index 0000000000..a4186b4c44 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/regex_search.html @@ -0,0 +1,425 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_search</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="regex_match.html" title="regex_match"> +<link rel="next" href="regex_replace.html" title="regex_replace"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_match.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_replace.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.regex_search"></a><a class="link" href="regex_search.html" title="regex_search">regex_search</a> +</h3></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The algorithm <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> will search a range + denoted by a pair of bidirectional-iterators for a given regular expression. + The algorithm uses various heuristics to reduce the search time by only checking + for a match if a match could conceivably start at that position. The algorithm + is defined as follows: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span> + <span class="keyword">typename</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span><span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<h5> +<a name="boost_regex.ref.regex_search.h0"></a> + <span><a name="boost_regex.ref.regex_search.description"></a></span><a class="link" href="regex_search.html#boost_regex.ref.regex_search.description">Description</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Requires</strong></span>: Type BidirectionalIterator meets + the requirements of a Bidirectional Iterator (24.1.4). + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: Determines whether there is some + sub-sequence within [first,last) that matches the regular expression <span class="emphasis"><em>e</em></span>, + parameter <span class="emphasis"><em>flags</em></span> is used to control how the expression + is matched against the character sequence. Returns true if such a sequence + exists, false otherwise. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<p> + <span class="bold"><strong>Postconditions</strong></span>: If the function returns + false, then the effect on parameter <span class="emphasis"><em>m</em></span> is undefined, + otherwise the effects on parameter <span class="emphasis"><em>m</em></span> are given in the + table: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">e</span><span class="special">.</span><span class="identifier">mark_count</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">first</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">last</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">first</span> <span class="special">!=</span> + <span class="identifier">m</span><span class="special">.</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">second</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">second</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">last</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">last</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">first</span> <span class="special">!=</span> + <span class="identifier">m</span><span class="special">.</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">second</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + The start of the sequence of characters that matched the regular + expression + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">second</span></code> + </p> + </td> +<td> + <p> + The end of the sequence of characters that matched the regular + expression + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + true if a full match was found, and false if it was a partial match + (found as a result of the match_partial flag being set). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">first</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>, the start of the sequence that + matched sub-expression <span class="emphasis"><em>n</em></span>. Alternatively, if + sub-expression <span class="emphasis"><em>n</em></span> did not participate in the + match, then last. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">second</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>, the end of the sequence that + matched sub-expression <span class="emphasis"><em>n</em></span>. Alternatively, if + sub-expression <span class="emphasis"><em>n</em></span> did not participate in the + match, then <code class="computeroutput"><span class="identifier">last</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">m</span><span class="special">[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">matched</span></code> + </p> + </td> +<td> + <p> + For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special"><</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code>, true if sub-expression <span class="emphasis"><em>n</em></span> + participated in the match, false otherwise. + </p> + </td> +</tr> +</tbody> +</table></div> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span><span class="special">,</span> <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">str</span><span class="special">,</span> <span class="identifier">str</span> + <span class="special">+</span> <span class="identifier">char_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">str</span><span class="special">),</span> + <span class="identifier">m</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="identifier">match_results</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">m</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">iterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">iterator</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">iterator</span> <span class="identifier">last</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Behaves "as if" by constructing + an instance of <code class="computeroutput"><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="identifier">what</span></code>, + and then returning the result of <code class="computeroutput"><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">str</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">str</span><span class="special">,</span> <span class="identifier">str</span> + <span class="special">+</span> <span class="identifier">char_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">>::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">str</span><span class="special">),</span> + <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">regex_search</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>. + </p> +<h5> +<a name="boost_regex.ref.regex_search.h1"></a> + <span><a name="boost_regex.ref.regex_search.examples"></a></span><a class="link" href="regex_search.html#boost_regex.ref.regex_search.examples">Examples</a> + </h5> +<p> + The following example, takes the contents of a file in the form of a string, + and searches for all the C++ class declarations in the file. The code will + work regardless of the way that <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> + is implemented, for example it could easily be modified to work with the + SGI rope class, which uses a non-contiguous storage strategy. + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">map</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="comment">// purpose: </span> +<span class="comment">// takes the contents of a file in the form of a string </span> +<span class="comment">// and searches for all the C++ class definitions, storing </span> +<span class="comment">// their locations in a map of strings/int's </span> +<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">map_type</span><span class="special">;</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">expression</span><span class="special">(</span> + <span class="string">"^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?"</span> + <span class="string">"(class|struct)[[:space:]]*"</span> + <span class="string">"(\\<\\w+\\>([[:blank:]]*\\([^)]*\\))?"</span> + <span class="string">"[[:space:]]*)*(\\<\\w*\\>)[[:space:]]*"</span> + <span class="string">"(<[^;:{]+>[[:space:]]*)?(\\{|:[^;\\{()]*\\{)"</span><span class="special">);</span> + +<span class="keyword">void</span> <span class="identifier">IndexClasses</span><span class="special">(</span><span class="identifier">map_type</span><span class="special">&</span> <span class="identifier">m</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">file</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">start</span><span class="special">,</span> <span class="identifier">end</span><span class="special">;</span> + <span class="identifier">start</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> + <span class="identifier">end</span> <span class="special">=</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_results</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">what</span><span class="special">;</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">start</span><span class="special">,</span> <span class="identifier">end</span><span class="special">,</span> <span class="identifier">what</span><span class="special">,</span> <span class="identifier">expression</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// what[0] contains the whole string </span> + <span class="comment">// what[5] contains the class name. </span> + <span class="comment">// what[6] contains the template specialisation if any. </span> + <span class="comment">// add class name and position to map: </span> + <span class="identifier">m</span><span class="special">[</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">second</span><span class="special">)</span> + <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">second</span><span class="special">)]</span> + <span class="special">=</span> <span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">first</span> <span class="special">-</span> <span class="identifier">file</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> + <span class="comment">// update search position: </span> + <span class="identifier">start</span> <span class="special">=</span> <span class="identifier">what</span><span class="special">[</span><span class="number">0</span><span class="special">].</span><span class="identifier">second</span><span class="special">;</span> + <span class="comment">// update flags: </span> + <span class="identifier">flags</span> <span class="special">|=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_prev_avail</span><span class="special">;</span> + <span class="identifier">flags</span> <span class="special">|=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_not_bob</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_match.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_replace.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/regex_token_iterator.html b/libs/regex/doc/html/boost_regex/ref/regex_token_iterator.html new file mode 100644 index 0000000000..fd2f577891 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/regex_token_iterator.html @@ -0,0 +1,484 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_token_iterator</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="regex_iterator.html" title="regex_iterator"> +<link rel="next" href="bad_expression.html" title="bad_expression"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="bad_expression.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.regex_token_iterator"></a><a class="link" href="regex_token_iterator.html" title="regex_token_iterator">regex_token_iterator</a> +</h3></div></div></div> +<p> + The template class <a class="link" href="regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> is an iterator + adapter; that is to say it represents a new view of an existing iterator + sequence, by enumerating all the occurrences of a regular expression within + that sequence, and presenting one or more character sequence for each match + found. Each position enumerated by the iterator is a <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> object that represents + what matched a particular sub-expression within the regular expression. When + class <a class="link" href="regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> is used to + enumerate a single sub-expression with index -1, then the iterator performs + field splitting: that is to say it enumerates one character sequence for + each section of the character container sequence that does not match the + regular expression specified. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">charT</span> <span class="special">=</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">traits</span> <span class="special">=</span> <span class="identifier">regex_traits</span><span class="special"><</span><span class="identifier">charT</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">regex_token_iterator</span> +<span class="special">{</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="keyword">typedef</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> <span class="identifier">regex_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="identifier">value_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">difference_type</span> <span class="identifier">difference_type</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <span class="identifier">reference</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward_iterator_tag</span> <span class="identifier">iterator_category</span><span class="special">;</span> + + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.construct1">regex_token_iterator</a><span class="special">();</span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.construct2">regex_token_iterator</a><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&</span> <span class="identifier">re</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">submatch</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.construct3">regex_token_iterator</a><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&</span> <span class="identifier">re</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatches</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <span class="keyword">template</span> <span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.construct4">regex_token_iterator</a><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&</span> <span class="identifier">re</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatches</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.construct5">regex_token_iterator</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_token_iterator</span><span class="special">&);</span> + <span class="identifier">regex_token_iterator</span><span class="special">&</span> <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.assign">operator=</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_token_iterator</span><span class="special">&);</span> + <span class="keyword">bool</span> <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.op_eq">operator==</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_token_iterator</span><span class="special">&)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">bool</span> <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.op_ne">operator!=</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_token_iterator</span><span class="special">&)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.op_deref">operator*</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.op_arrow">operator-></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="identifier">regex_token_iterator</span><span class="special">&</span> <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.op_inc1">operator++</a><span class="special">();</span> + <span class="identifier">regex_token_iterator</span> <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.op_inc2">operator++</a><span class="special">(</span><span class="keyword">int</span><span class="special">);</span> +<span class="special">};</span> + +<span class="keyword">typedef</span> <span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> <span class="identifier">cregex_token_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">sregex_token_iterator</span><span class="special">;</span> +<span class="preprocessor">#ifndef</span> <span class="identifier">BOOST_NO_WREGEX</span> +<span class="keyword">typedef</span> <span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> <span class="identifier">wcregex_token_iterator</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">regex_token_iterator</span><span class="special"><<</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">wsregex_token_iterator</span><span class="special">;</span> +<span class="preprocessor">#endif</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.make">make_regex_token_iterator</a><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">submatch</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.make">make_regex_token_iterator</a><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">submatch</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> +<a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.make">make_regex_token_iterator</a><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.make">make_regex_token_iterator</a><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.make">make_regex_token_iterator</a><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span> + <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <a class="link" href="regex_token_iterator.html#boost_regex.regex_token_iterator.make">make_regex_token_iterator</a><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<h5> +<a name="boost_regex.ref.regex_token_iterator.h0"></a> + <span><a name="boost_regex.ref.regex_token_iterator.description"></a></span><a class="link" href="regex_token_iterator.html#boost_regex.ref.regex_token_iterator.description">Description</a> + </h5> +<a name="boost_regex.regex_token_iterator.construct1"></a><pre class="programlisting"><span class="identifier">regex_token_iterator</span><span class="special">();</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs an end of sequence iterator. + </p> +<a name="boost_regex.regex_token_iterator.construct2"></a><pre class="programlisting"><span class="identifier">regex_token_iterator</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&</span> <span class="identifier">re</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">submatch</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Preconditions</strong></span>: <code class="computeroutput"><span class="special">!</span><span class="identifier">re</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span></code>. Object <span class="emphasis"><em>re</em></span> shall exist + for the lifetime of the iterator constructed from it. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs a <a class="link" href="regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> that will enumerate + one string for each regular expression match of the expression <span class="emphasis"><em>re</em></span> + found within the sequence [a,b), using match flags <span class="emphasis"><em>m</em></span> + (see <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>). + The string enumerated is the sub-expression <span class="emphasis"><em>submatch</em></span> + for each match found; if <span class="emphasis"><em>submatch</em></span> is -1, then enumerates + all the text sequences that did not match the expression <span class="emphasis"><em>re</em></span> + (that is to performs field splitting). + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<a name="boost_regex.regex_token_iterator.construct3"></a><pre class="programlisting"><span class="identifier">regex_token_iterator</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&</span> <span class="identifier">re</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatches</span><span class="special">,</span> + <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Preconditions</strong></span>: <code class="computeroutput"><span class="identifier">submatches</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> + <span class="special">&&</span> <span class="special">!</span><span class="identifier">re</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span></code>. Object <span class="emphasis"><em>re</em></span> shall exist + for the lifetime of the iterator constructed from it. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs a <a class="link" href="regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> that will enumerate + <code class="computeroutput"><span class="identifier">submatches</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code> + strings for each regular expression match of the expression <span class="emphasis"><em>re</em></span> + found within the sequence [a,b), using match flags <span class="emphasis"><em>m</em></span> + (see <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>). + For each match found one string will be enumerated for each sub-expression + index contained within submatches vector; if <code class="computeroutput"><span class="identifier">submatches</span><span class="special">[</span><span class="number">0</span><span class="special">]</span></code> + is -1, then the first string enumerated for each match will be all of the + text from end of the last match to the start of the current match, in addition + there will be one extra string enumerated when no more matches can be found: + from the end of the last match found, to the end of the underlying sequence. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<a name="boost_regex.regex_token_iterator.construct4"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&</span> <span class="identifier">re</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatches</span><span class="special">)[</span><span class="identifier">R</span><span class="special">],</span> + <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Preconditions</strong></span>: <code class="computeroutput"><span class="special">!</span><span class="identifier">re</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span></code>. Object <span class="emphasis"><em>re</em></span> shall exist + for the lifetime of the iterator constructed from it. + </p> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs a <a class="link" href="regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> that will enumerate + <span class="emphasis"><em>R</em></span> strings for each regular expression match of the expression + <span class="emphasis"><em>re</em></span> found within the sequence [a,b), using match flags + <span class="emphasis"><em>m</em></span> (see <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>). For each match + found one string will be enumerated for each sub-expression index contained + within the <span class="emphasis"><em>submatches</em></span> array; if <code class="computeroutput"><span class="identifier">submatches</span><span class="special">[</span><span class="number">0</span><span class="special">]</span></code> + is -1, then the first string enumerated for each match will be all of the + text from end of the last match to the start of the current match, in addition + there will be one extra string enumerated when no more matches can be found: + from the end of the last match found, to the end of the underlying sequence. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<a name="boost_regex.regex_token_iterator.construct5"></a><pre class="programlisting"><span class="identifier">regex_token_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_token_iterator</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs a copy of <code class="computeroutput"><span class="identifier">that</span></code>. + </p> +<p> + <span class="bold"><strong>Postconditions</strong></span>: <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">==</span> <span class="identifier">that</span></code>. + </p> +<a name="boost_regex.regex_token_iterator.assign"></a><pre class="programlisting"><span class="identifier">regex_token_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">regex_token_iterator</span><span class="special">&</span> <span class="identifier">that</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: sets <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> to be equal to <code class="computeroutput"><span class="identifier">that</span></code>. + </p> +<p> + <span class="bold"><strong>Postconditions</strong></span>: <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">==</span> <span class="identifier">that</span></code>. + </p> +<a name="boost_regex.regex_token_iterator.op_eq"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">regex_token_iterator</span><span class="special">&)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns true if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is the same position as <code class="computeroutput"><span class="identifier">that</span></code>. + </p> +<a name="boost_regex.regex_token_iterator.op_ne"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">regex_token_iterator</span><span class="special">&)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">!(*</span><span class="keyword">this</span> <span class="special">==</span> <span class="identifier">that</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.regex_token_iterator.op_deref"></a><pre class="programlisting"><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">*()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns the current character sequence + being enumerated. + </p> +<a name="boost_regex.regex_token_iterator.op_arrow"></a><pre class="programlisting"><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">->()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">&(*</span><span class="keyword">this</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.regex_token_iterator.op_inc1"></a><pre class="programlisting"><span class="identifier">regex_token_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: Moves on to the next character + sequence to be enumerated. + </p> +<p> + <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + if the complexity of matching the expression against an N character string + begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching + the expression (if Boost.Regex is configured in recursive mode), or if the + matcher exhausts its permitted memory allocation (if Boost.Regex is configured + in non-recursive mode). + </p> +<p> + <span class="bold"><strong>Returns</strong></span>: <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. + </p> +<a name="boost_regex.regex_token_iterator.op_inc2"></a><pre class="programlisting"><span class="identifier">regex_token_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: constructs a copy result of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>, then + calls <code class="computeroutput"><span class="special">++(*</span><span class="keyword">this</span><span class="special">)</span></code>. + </p> +<p> + <span class="bold"><strong>Returns</strong></span>: result. + </p> +<a name="boost_regex.regex_token_iterator.make"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">submatch</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">int</span> <span class="identifier">submatch</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> +<span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span> + <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="special">(&</span><span class="identifier">submatch</span><span class="special">)[</span><span class="identifier">N</span><span class="special">],</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">></span> +<span class="identifier">regex_token_iterator</span><span class="special"><</span> + <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">></span> + <span class="identifier">make_regex_token_iterator</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">>&</span> <span class="identifier">p</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">e</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>&</span> <span class="identifier">submatch</span><span class="special">,</span> + <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns a <a class="link" href="regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a> that enumerates + one <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + for each value in <span class="emphasis"><em>submatch</em></span> for each occurrence of regular + expression <span class="emphasis"><em>e</em></span> in string <span class="emphasis"><em>p</em></span>, matched + using <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> + <span class="emphasis"><em>m</em></span>. + </p> +<h5> +<a name="boost_regex.ref.regex_token_iterator.h1"></a> + <span><a name="boost_regex.ref.regex_token_iterator.examples"></a></span><a class="link" href="regex_token_iterator.html#boost_regex.ref.regex_token_iterator.examples">Examples</a> + </h5> +<p> + The following example takes a string and splits it into a series of tokens: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">;</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="keyword">do</span><span class="special">{</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">argc</span> <span class="special">==</span> <span class="number">1</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Enter text to split (or \"quit\" to exit): "</span><span class="special">;</span> + <span class="identifier">getline</span><span class="special">(</span><span class="identifier">cin</span><span class="special">,</span> <span class="identifier">s</span><span class="special">);</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">s</span> <span class="special">==</span> <span class="string">"quit"</span><span class="special">)</span> <span class="keyword">break</span><span class="special">;</span> + <span class="special">}</span> + <span class="keyword">else</span> + <span class="identifier">s</span> <span class="special">=</span> <span class="string">"This is a string of tokens"</span><span class="special">;</span> + + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">re</span><span class="special">(</span><span class="string">"\\s+"</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_token_iterator</span> <span class="identifier">i</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">re</span><span class="special">,</span> <span class="special">-</span><span class="number">1</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_token_iterator</span> <span class="identifier">j</span><span class="special">;</span> + + <span class="keyword">unsigned</span> <span class="identifier">count</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="special">*</span><span class="identifier">i</span><span class="special">++</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">count</span><span class="special">++;</span> + <span class="special">}</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"There were "</span> <span class="special"><<</span> <span class="identifier">count</span> <span class="special"><<</span> <span class="string">" tokens found."</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> + + <span class="special">}</span><span class="keyword">while</span><span class="special">(</span><span class="identifier">argc</span> <span class="special">==</span> <span class="number">1</span><span class="special">);</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + The following example takes a html file and outputs a list of all the linked + files: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">fstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iterator</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="string">"<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\""</span><span class="special">,</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">normal</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regbase</span><span class="special">::</span><span class="identifier">icase</span><span class="special">);</span> + +<span class="keyword">void</span> <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">erase</span><span class="special">();</span> + <span class="comment">//</span> + <span class="comment">// attempt to grow string buffer to match file size,</span> + <span class="comment">// this doesn't always work...</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">rdbuf</span><span class="special">()-></span><span class="identifier">in_avail</span><span class="special">());</span> + <span class="keyword">char</span> <span class="identifier">c</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">c</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// use logarithmic growth stategy, in case</span> + <span class="comment">// in_avail (above) returned zero:</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">())</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">*</span> <span class="number">3</span><span class="special">);</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">append</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**</span> <span class="identifier">argv</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">i</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">argc</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Findings URL's in "</span> <span class="special"><<</span> <span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special"><<</span> <span class="string">":"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">erase</span><span class="special">();</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ifstream</span> <span class="identifier">is</span><span class="special">(</span><span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span> + <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">is</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_token_iterator</span> <span class="identifier">i</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_token_iterator</span> <span class="identifier">j</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">*</span><span class="identifier">i</span><span class="special">++</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">}</span> + <span class="comment">//</span> + <span class="comment">// alternative method:</span> + <span class="comment">// test the array-literal constructor, and split out the whole</span> + <span class="comment">// match as well as $1....</span> + <span class="comment">//</span> + <span class="keyword">for</span><span class="special">(</span><span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">argc</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Findings URL's in "</span> <span class="special"><<</span> <span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special"><<</span> <span class="string">":"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">s</span><span class="special">.</span><span class="identifier">erase</span><span class="special">();</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">ifstream</span> <span class="identifier">is</span><span class="special">(</span><span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span> + <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">is</span><span class="special">);</span> + <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">subs</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">0</span><span class="special">,};</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_token_iterator</span> <span class="identifier">i</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">subs</span><span class="special">);</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_token_iterator</span> <span class="identifier">j</span><span class="special">;</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">*</span><span class="identifier">i</span><span class="special">++</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">}</span> + + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="regex_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="bad_expression.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/regex_traits.html b/libs/regex/doc/html/boost_regex/ref/regex_traits.html new file mode 100644 index 0000000000..7b7843b3c6 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/regex_traits.html @@ -0,0 +1,107 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>regex_traits</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="error_type.html" title="error_type"> +<link rel="next" href="non_std_strings.html" title="Interfacing With Non-Standard String Types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="error_type.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="non_std_strings.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.regex_traits"></a><a class="link" href="regex_traits.html" title="regex_traits">regex_traits</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">implementationT</span> <span class="special">=</span> <span class="identifier">sensible_default_choice</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">regex_traits</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">implementationT</span> +<span class="special">{</span> + <span class="identifier">regex_traits</span><span class="special">()</span> <span class="special">:</span> <span class="identifier">implementationT</span><span class="special">()</span> <span class="special">{}</span> +<span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">c_regex_traits</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">cpp_regex_traits</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">w32_regex_traits</span><span class="special">;</span> + +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<h5> +<a name="boost_regex.ref.regex_traits.h0"></a> + <span><a name="boost_regex.ref.regex_traits.description"></a></span><a class="link" href="regex_traits.html#boost_regex.ref.regex_traits.description">Description</a> + </h5> +<p> + The class <code class="computeroutput"><span class="identifier">regex_traits</span></code> is + just a thin wrapper around an actual implemention class, which may be one + of: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">c_regex_traits</span></code>: this + class is deprecated, it wraps the C locale, and is used as the default + implementation when the platform is not Win32, and the C++ locale is + not available. + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">cpp_regex_traits</span></code>: the + default traits class for non-Win32 platforms, allows the regex class + to be imbued with a std::locale instance. + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">w32_regex_traits</span></code>: the + default traits class implementation on Win32 platforms, allows the regex + class to be imbued with an LCID. + </li> +</ul></div> +<p> + The default behavior can be altered by defining one of the following configuration + macros in <a href="../../../../../../boost/regex/user.hpp" target="_top">boost/regex/user.hpp</a> + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + BOOST_REGEX_USE_C_LOCALE: makes <code class="computeroutput"><span class="identifier">c_regex_traits</span></code> + the default. + </li> +<li class="listitem"> + BOOST_REGEX_USE_CPP_LOCALE: makes <code class="computeroutput"><span class="identifier">cpp_regex_traits</span></code> + the default. + </li> +</ul></div> +<p> + All these traits classes fulfil the <a class="link" href="concepts/traits_concept.html" title="Traits Class Requirements">traits + class requirements</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="error_type.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="non_std_strings.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/sub_match.html b/libs/regex/doc/html/boost_regex/ref/sub_match.html new file mode 100644 index 0000000000..d66855093e --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/sub_match.html @@ -0,0 +1,912 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>sub_match</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="match_results.html" title="match_results"> +<link rel="next" href="regex_match.html" title="regex_match"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="match_results.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_match.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.sub_match"></a><a class="link" href="sub_match.html" title="sub_match">sub_match</a> +</h3></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Regular expressions are different from many simple pattern-matching algorithms + in that as well as finding an overall match they can also produce sub-expression + matches: each sub-expression being delimited in the pattern by a pair of + parenthesis (...). There has to be some method for reporting sub-expression + matches back to the user: this is achieved this by defining a class <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> + that acts as an indexed collection of sub-expression matches, each sub-expression + match being contained in an object of type <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a>. + </p> +<p> + Objects of type <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + may only be obtained by subscripting an object of type <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a>. + </p> +<p> + Objects of type <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + may be compared to objects of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code>, + or <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span></code> or <code class="computeroutput"><span class="keyword">const</span> + <span class="identifier">charT</span></code>. + </p> +<p> + Objects of type <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + may be added to objects of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code>, + or <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span></code> or <code class="computeroutput"><span class="keyword">const</span> + <span class="identifier">charT</span></code>, to produce a new <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code> + object. + </p> +<p> + When the marked sub-expression denoted by an object of type <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> participated in a regular + expression match then member <span class="emphasis"><em>matched</em></span> evaluates to <span class="emphasis"><em>true</em></span>, + and members <span class="emphasis"><em>first</em></span> and <span class="emphasis"><em>second</em></span> denote + the range of characters [first,second) which formed that match. Otherwise + <span class="emphasis"><em>matched</em></span> is <span class="emphasis"><em>false</em></span>, and members + <span class="emphasis"><em>first</em></span> and <span class="emphasis"><em>second</em></span> contained undefined + values. + </p> +<p> + When the marked sub-expression denoted by an object of type <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> was repeated, then the + <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + object represents the match obtained by the <span class="emphasis"><em>last</em></span> repeat. + The complete set of all the captures obtained for all the repeats, may be + accessed via the captures() member function (Note: this has serious performance + implications, you have to explicitly enable this feature). + </p> +<p> + If an object of type <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> represents sub-expression + 0 - that is to say the whole match - then member <span class="emphasis"><em>matched</em></span> + is always <span class="emphasis"><em>true</em></span>, unless a <a class="link" href="../partial_matches.html" title="Partial Matches">partial + match</a> was obtained as a result of the flag <code class="computeroutput"><span class="identifier">match_partial</span></code> + being passed to a regular expression algorithm, in which case member <span class="emphasis"><em>matched</em></span> + is <span class="emphasis"><em>false</em></span>, and members <span class="emphasis"><em>first</em></span> and + <span class="emphasis"><em>second</em></span> represent the character range that formed the + partial match. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">sub_match</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*></span> <span class="identifier">csub_match</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*></span> <span class="identifier">wcsub_match</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">ssub_match</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">></span> <span class="identifier">wssub_match</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">sub_match</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="special">{</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <a class="link" href="sub_match.html#boost_regex.sub_match.value_type">value_type</a><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">difference_type</span> <a class="link" href="sub_match.html#boost_regex.sub_match.diff_type">difference_type</a><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">BidirectionalIterator</span> <a class="link" href="sub_match.html#boost_regex.sub_match.it_type">iterator</a><span class="special">;</span> + + <span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.matched">matched</a><span class="special">;</span> + + <span class="identifier">difference_type</span> <a class="link" href="sub_match.html#boost_regex.sub_match.length">length</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <a class="link" href="sub_match.html#boost_regex.sub_match.cast">operator basic_string<value_type></a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">></span> <a class="link" href="sub_match.html#boost_regex.sub_match.str">str</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + + <span class="keyword">int</span> <a class="link" href="sub_match.html#boost_regex.sub_match.compare1">compare</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special">&</span> <span class="identifier">s</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">int</span> <a class="link" href="sub_match.html#boost_regex.sub_match.compare2">compare</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">int</span> <a class="link" href="sub_match.html#boost_regex.sub_match.compare3">compare</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="identifier">s</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="preprocessor">#ifdef</span> <span class="identifier">BOOST_REGEX_MATCH_EXTRA</span> + <span class="keyword">typedef</span> <span class="identifier">implementation</span><span class="special">-</span><span class="keyword">private</span> <a class="link" href="sub_match.html#boost_regex.sub_match.cap_seq_type">capture_sequence_type</a><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">capture_sequence_type</span><span class="special">&</span> <a class="link" href="sub_match.html#boost_regex.sub_match.captures">captures</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +<span class="preprocessor">#endif</span> +<span class="special">};</span> +<span class="comment">//</span> +<span class="comment">// comparisons to another sub_match:</span> +<span class="comment">//</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare1">operator ==</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare2">operator !=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare3">operator <</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare4">operator <=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare5">operator >=</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare6">operator ></a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + + +<span class="comment">//</span> +<span class="comment">// comparisons to a basic_string:</span> +<span class="comment">//</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare7">operator ==</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare8">operator != </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare9">operator <</a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare10">operator ></a> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare11">operator >= </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare12">operator <= </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare13">operator == </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare14">operator != </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare15">operator < </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare16">operator > </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare17">operator >= </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare18">operator <= </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="comment">//</span> +<span class="comment">// comparisons to a pointer to a character array:</span> +<span class="comment">//</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare19">operator == </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare20">operator != </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare21">operator < </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare22">operator > </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare23">operator >= </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare24">operator <= </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare25">operator == </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare26">operator != </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare27">operator < </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare28">operator > </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare29">operator >= </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare30">operator <= </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="comment">//</span> +<span class="comment">// comparisons to a single character:</span> +<span class="comment">//</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare31">operator == </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare32">operator != </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare33">operator < </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare34">operator > </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare35">operator >= </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare36">operator <= </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare37">operator == </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare38">operator != </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare39">operator < </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare40">operator > </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare41">operator >= </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <a class="link" href="sub_match.html#boost_regex.sub_match.op_compare42">operator <= </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +<span class="comment">// </span> +<span class="comment">// addition operators: </span> +<span class="comment">//</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">></span> + <a class="link" href="sub_match.html#boost_regex.sub_match.op_add1">operator + </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">></span> + <a class="link" href="sub_match.html#boost_regex.sub_match.op_add2">operator + </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <a class="link" href="sub_match.html#boost_regex.sub_match.op_add3">operator + </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <a class="link" href="sub_match.html#boost_regex.sub_match.op_add4">operator + </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span> <span class="special">*</span> <span class="identifier">s</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <a class="link" href="sub_match.html#boost_regex.sub_match.op_add5">operator + </a><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <a class="link" href="sub_match.html#boost_regex.sub_match.op_add6">operator + </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">s</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <a class="link" href="sub_match.html#boost_regex.sub_match.op_add7">operator + </a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m1</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span> + +<span class="comment">//</span> +<span class="comment">// stream inserter:</span> +<span class="comment">//</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> + <a class="link" href="sub_match.html#boost_regex.sub_match.op_stream">operator << </a><span class="special">(</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">os</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> + +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<h5> +<a name="boost_regex.ref.sub_match.h0"></a> + <span><a name="boost_regex.ref.sub_match.description"></a></span><a class="link" href="sub_match.html#boost_regex.ref.sub_match.description">Description</a> + </h5> +<h6> +<a name="boost_regex.ref.sub_match.h1"></a> + <span><a name="boost_regex.ref.sub_match.members"></a></span><a class="link" href="sub_match.html#boost_regex.ref.sub_match.members">Members</a> + </h6> +<a name="boost_regex.sub_match.value_type"></a><pre class="programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="identifier">value_type</span><span class="special">;</span> +</pre> +<p> + The type pointed to by the iterators. + </p> +<a name="boost_regex.sub_match.diff_type"></a><pre class="programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">>::</span><span class="identifier">difference_type</span> <span class="identifier">difference_type</span><span class="special">;</span> +</pre> +<p> + A type that represents the difference between two iterators. + </p> +<a name="boost_regex.sub_match.it_type"></a><pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">iterator</span><span class="special">;</span> +</pre> +<p> + The iterator type. + </p> +<a name="boost_regex.sub_match.first"></a><pre class="programlisting"><span class="identifier">iterator</span> <span class="identifier">first</span> +</pre> +<p> + An iterator denoting the position of the start of the match. + </p> +<a name="boost_regex.sub_match.second"></a><pre class="programlisting"><span class="identifier">iterator</span> <span class="identifier">second</span> +</pre> +<p> + An iterator denoting the position of the end of the match. + </p> +<a name="boost_regex.sub_match.matched"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">matched</span> +</pre> +<p> + A Boolean value denoting whether this sub-expression participated in the + match. + </p> +<a name="boost_regex.sub_match.length"></a><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">difference_type</span> <span class="identifier">length</span><span class="special">();</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns the length of this matched + sub-expression, or 0 if this sub-expression was not matched: <code class="computeroutput"><span class="identifier">matched</span> <span class="special">?</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">second</span><span class="special">)</span> <span class="special">:</span> <span class="number">0</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.sub_match.cast"></a><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">>()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: converts <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> into a string: returns <code class="computeroutput"><span class="special">(</span><span class="identifier">matched</span> <span class="special">?</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">>(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">second</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">>())</span></code>. + </p> +<a name="boost_regex.sub_match.str"></a><pre class="programlisting"><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">></span> <span class="identifier">str</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns a string representation + of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>: + <code class="computeroutput"><span class="special">(</span><span class="identifier">matched</span> + <span class="special">?</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">>(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">second</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">>())</span></code>. + </p> +<a name="boost_regex.sub_match.compare1"></a><pre class="programlisting"><span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special">&</span> <span class="identifier">s</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: performs a lexical comparison to + <span class="emphasis"><em>s</em></span>: returns <code class="computeroutput"><span class="identifier">str</span><span class="special">().</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">str</span><span class="special">())</span></code>. + </p> +<a name="boost_regex.sub_match.compare2"></a><pre class="programlisting"><span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">value_type</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: compares <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> to the string <span class="emphasis"><em>s</em></span>: + returns <code class="computeroutput"><span class="identifier">str</span><span class="special">().</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.sub_match.compare3"></a><pre class="programlisting"><span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="identifier">s</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: compares <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> to the null-terminated string <span class="emphasis"><em>s</em></span>: + returns <code class="computeroutput"><span class="identifier">str</span><span class="special">().</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code>. + </p> +<a name="boost_regex.sub_match.cap_seq_type"></a><pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">implementation</span><span class="special">-</span><span class="keyword">private</span> <span class="identifier">capture_sequence_type</span><span class="special">;</span> +</pre> +<p> + Defines an implementation-specific type that satisfies the requirements of + a standard library Sequence (21.1.1 including the optional Table 68 operations), + whose value_type is a <code class="computeroutput"><span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span></code>. This type happens to be <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">></span> <span class="special">></span></code>, + but you shouldn't actually rely on that. + </p> +<a name="boost_regex.sub_match.captures"></a><pre class="programlisting"><span class="keyword">const</span> <span class="identifier">capture_sequence_type</span><span class="special">&</span> <span class="identifier">captures</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns a sequence containing all + the captures obtained for this sub-expression. + </p> +<p> + <span class="bold"><strong>Preconditions</strong></span>: the library must be built + and used with BOOST_REGEX_MATCH_EXTRA defined, and you must pass the flag + <code class="computeroutput"><span class="identifier">match_extra</span></code> to the regex + matching functions ( <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a>, <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a>, <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> or <a class="link" href="regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a>) in order for + this member #function to be defined and return useful information. + </p> +<p> + <span class="bold"><strong>Rationale</strong></span>: Enabling this feature has several + consequences: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + sub_match occupies more memory resulting in complex expressions running + out of memory or stack space more quickly during matching. + </li> +<li class="listitem"> + The matching algorithms are less efficient at handling some features + (independent sub-expressions for example), even when match_extra is not + used. + </li> +<li class="listitem"> + The matching algorithms are much less efficient (i.e. slower), when match_extra + is used. Mostly this is down to the extra memory allocations that have + to take place. + </li> +</ul></div> +<h6> +<a name="boost_regex.ref.sub_match.h2"></a> + <span><a name="boost_regex.ref.sub_match.sub_match_non_member_operators"></a></span><a class="link" href="sub_match.html#boost_regex.ref.sub_match.sub_match_non_member_operators">sub_match + non-member operators</a> + </h6> +<a name="boost_regex.sub_match.op_compare1"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special">==</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare2"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special">!=</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare3"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special"><</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare4"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special"><=</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare5"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special">>=</span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare6"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> + <span class="special">></span> <span class="number">0</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare7"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">==</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare8"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">!=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare9"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special"><</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare10"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">></span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare11"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">>=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare12"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special"><=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare13"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">==</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare14"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">!=</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare15"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special"><</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare16"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">></span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare17"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">>=</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare18"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special"><=</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare19"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">==</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare20"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">!=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare21"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special"><</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare22"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">></span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare23"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">>=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare24"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special"><=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare25"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">==</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare26"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">!=</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare27"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special"><</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare28"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">></span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare29"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">>=</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare30"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special"><=</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare31"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">==</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare32"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">!=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare33"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special"><</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare34"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">></span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare35"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special">>=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare36"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span> + <span class="special"><=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare37"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">==</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare38"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">!=</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare39"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special"><</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare40"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">></span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare41"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">>=</span> <span class="identifier">rhs</span></code>. + </p> +<a name="boost_regex.sub_match.op_compare42"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">lhs</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special"><=</span> <span class="identifier">rhs</span></code>. + </p> +<p> + The addition operators for <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> allow you to add a <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a> + to any type to which you can add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> + and obtain a new string as the result. + </p> +<a name="boost_regex.sub_match.op_add1"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">></span> + <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">s</span> + <span class="special">+</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_add2"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">></span> + <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">,</span> + <span class="identifier">traits</span><span class="special">,</span> + <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">s</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">+</span> <span class="identifier">s</span></code>. + </p> +<a name="boost_regex.sub_match.op_add3"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">s</span> + <span class="special">+</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_add4"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span> <span class="special">*</span> <span class="identifier">s</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">+</span> <span class="identifier">s</span></code>. + </p> +<a name="boost_regex.sub_match.op_add5"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">s</span> + <span class="special">+</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<a name="boost_regex.sub_match.op_add6"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">s</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">+</span> <span class="identifier">s</span></code>. + </p> +<a name="boost_regex.sub_match.op_add7"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>::</span><span class="identifier">value_type</span><span class="special">></span> + <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m1</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="identifier">m1</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> + <span class="special">+</span> <span class="identifier">m2</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>. + </p> +<h6> +<a name="boost_regex.ref.sub_match.h3"></a> + <span><a name="boost_regex.ref.sub_match.stream_inserter"></a></span><a class="link" href="sub_match.html#boost_regex.ref.sub_match.stream_inserter">Stream + inserter</a> + </h6> +<a name="boost_regex.sub_match.op_stream"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">></span> +<span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> + <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">os</span> + <span class="keyword">const</span> <span class="identifier">sub_match</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">>&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">(</span><span class="identifier">os</span> <span class="special"><<</span> <span class="identifier">m</span><span class="special">.</span><span class="identifier">str</span><span class="special">())</span></code>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="match_results.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_match.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/syntax_option_type.html b/libs/regex/doc/html/boost_regex/ref/syntax_option_type.html new file mode 100644 index 0000000000..f21d4c990a --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/syntax_option_type.html @@ -0,0 +1,57 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>syntax_option_type</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="bad_expression.html" title="bad_expression"> +<link rel="next" href="syntax_option_type/syntax_option_type_synopsis.html" title="syntax_option_type Synopsis"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="bad_expression.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type/syntax_option_type_synopsis.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.ref.syntax_option_type"></a><a class="link" href="syntax_option_type.html" title="syntax_option_type">syntax_option_type</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="syntax_option_type/syntax_option_type_synopsis.html">syntax_option_type + Synopsis</a></span></dt> +<dt><span class="section"><a href="syntax_option_type/syntax_option_type_overview.html">Overview + of syntax_option_type</a></span></dt> +<dt><span class="section"><a href="syntax_option_type/syntax_option_type_perl.html">Options + for Perl Regular Expressions</a></span></dt> +<dt><span class="section"><a href="syntax_option_type/syntax_option_type_extended.html">Options + for POSIX Extended Regular Expressions</a></span></dt> +<dt><span class="section"><a href="syntax_option_type/syntax_option_type_basic.html">Options + for POSIX Basic Regular Expressions</a></span></dt> +<dt><span class="section"><a href="syntax_option_type/syntax_option_type_literal.html">Options + for Literal Strings</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="bad_expression.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type/syntax_option_type_synopsis.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_basic.html b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_basic.html new file mode 100644 index 0000000000..6b54e08a22 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_basic.html @@ -0,0 +1,414 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Options for POSIX Basic Regular Expressions</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax_option_type.html" title="syntax_option_type"> +<link rel="prev" href="syntax_option_type_extended.html" title="Options for POSIX Extended Regular Expressions"> +<link rel="next" href="syntax_option_type_literal.html" title="Options for Literal Strings"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_extended.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_literal.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.syntax_option_type.syntax_option_type_basic"></a><a class="link" href="syntax_option_type_basic.html" title="Options for POSIX Basic Regular Expressions">Options + for POSIX Basic Regular Expressions</a> +</h4></div></div></div> +<p> + Exactly one of the following must always be set for POSIX basic regular + expressions: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Standardized + </p> + </th> +<th> + <p> + Effect When Set + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + basic + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the grammar recognized by the regular expression + engine is the same as that used by <a class="link" href="../../syntax/basic_syntax.html" title="POSIX Basic Regular Expression Syntax">POSIX + basic regular expressions</a> in IEEE Std 1003.1-2001, Portable + Operating System Interface (POSIX ), Base Definitions and Headers, + Section 9, Regular Expressions (FWD.1). + </p> + </td> +</tr> +<tr> +<td> + <p> + sed + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + As Above. + </p> + </td> +</tr> +<tr> +<td> + <p> + grep + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the grammar recognized by the regular expression + engine is the same as that used by POSIX utility <code class="computeroutput"><span class="identifier">grep</span></code> in IEEE Std 1003.1-2001, + Portable Operating System Interface (POSIX ), Shells and Utilities, + Section 4, Utilit\ies, grep (FWD.1). + </p> + <p> + That is to say, the same as <a class="link" href="../../syntax/basic_syntax.html" title="POSIX Basic Regular Expression Syntax">POSIX + basic syntax</a>, but with the newline character acting as + an alternation character; the expression is treated as a newline + separated list of alternatives. + </p> + </td> +</tr> +<tr> +<td> + <p> + emacs + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Specifies that the grammar recognised is the superset of the + <a class="link" href="../../syntax/basic_syntax.html" title="POSIX Basic Regular Expression Syntax">POSIX-Basic syntax</a> + used by the emacs program. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + The following options may also be set when using POSIX basic regular expressions: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Standardized + </p> + </th> +<th> + <p> + Effect when set + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + icase + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that matching of regular expressions against a character + container sequence shall be performed without regard to case. + </p> + </td> +</tr> +<tr> +<td> + <p> + nosubs + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that when a regular expression is matched against a + character container sequence, then no sub-expression matches + are to be stored in the supplied <a class="link" href="../match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> structure. + </p> + </td> +</tr> +<tr> +<td> + <p> + optimize + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the regular expression engine should pay more + attention to the speed with which regular expressions are matched, + and less to the speed with which regular expression objects are + constructed. Otherwise it has no detectable effect on the program + output. This currently has no effect for Boost.Regex. + </p> + </td> +</tr> +<tr> +<td> + <p> + collate + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that character ranges of the form <code class="computeroutput"><span class="special">[</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">b</span><span class="special">]</span></code> + should be locale sensitive. This bit is on by default for <a class="link" href="../../syntax/basic_syntax.html" title="POSIX Basic Regular Expression Syntax">POSIX-Basic regular + expressions</a>, but can be unset to force ranges to be compared + by code point only. + </p> + </td> +</tr> +<tr> +<td> + <p> + newline_alt + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Specifies that the \n character has the same effect as the alternation + operator |. Allows newline separated lists to be used as a list + of alternatives. This bit is already set, if you use the <code class="computeroutput"><span class="identifier">grep</span></code> option. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_char_classes + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then character classes such as <code class="computeroutput"><span class="special">[[:</span><span class="identifier">alnum</span><span class="special">:]]</span></code> + are not allowed. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_escape_in_lists + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set this makes the escape character ordinary inside lists, + so that <code class="computeroutput"><span class="special">[\</span><span class="identifier">b</span><span class="special">]</span></code> would match either '\' or 'b'. + This bit is on by default for <a class="link" href="../../syntax/basic_syntax.html" title="POSIX Basic Regular Expression Syntax">POSIX-basic + regular expressions</a>, but can be unset to force escapes + to be recognised inside lists. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_intervals + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then bounded repeats such as a{2,3} are not permitted. + </p> + </td> +</tr> +<tr> +<td> + <p> + bk_plus_qm + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then <code class="computeroutput"><span class="special">\?</span></code> + acts as a zero-or-one repeat operator, and <code class="computeroutput"><span class="special">\+</span></code> + acts as a one-or-more repeat operator. + </p> + </td> +</tr> +<tr> +<td> + <p> + bk_vbar + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then <code class="computeroutput"><span class="special">\|</span></code> + acts as the alternation operator. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_except + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Prevents <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> from throwing + an exception when an invalid expression is encountered. + </p> + </td> +</tr> +<tr> +<td> + <p> + save_subexpression_location + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then the locations of individual sub-expressions within + the <span class="emphasis"><em>original regular expression string</em></span> can + be accessed via the <a class="link" href="../basic_regex.html#boost_regex.basic_regex.subexpression"><code class="computeroutput"><span class="identifier">subexpression</span><span class="special">()</span></code></a> + member function of <code class="computeroutput"><span class="identifier">basic_regex</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_extended.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_literal.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_extended.html b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_extended.html new file mode 100644 index 0000000000..fd102e82f3 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_extended.html @@ -0,0 +1,367 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Options for POSIX Extended Regular Expressions</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax_option_type.html" title="syntax_option_type"> +<link rel="prev" href="syntax_option_type_perl.html" title="Options for Perl Regular Expressions"> +<link rel="next" href="syntax_option_type_basic.html" title="Options for POSIX Basic Regular Expressions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_perl.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_basic.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.syntax_option_type.syntax_option_type_extended"></a><a class="link" href="syntax_option_type_extended.html" title="Options for POSIX Extended Regular Expressions">Options + for POSIX Extended Regular Expressions</a> +</h4></div></div></div> +<p> + Exactly one of the following must always be set for <a class="link" href="../../syntax/basic_extended.html" title="POSIX Extended Regular Expression Syntax">POSIX + extended regular expressions</a>: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Standardized + </p> + </th> +<th> + <p> + Effect when set + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + extended + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the grammar recognized by the regular expression + engine is the same as that used by POSIX extended regular expressions + in IEEE Std 1003.1-2001, Portable Operating System Interface + (POSIX ), Base Definitions and Headers, Section 9, Regular Expressions + (FWD.1). + </p> + <p> + Refer to the <a class="link" href="../../syntax/basic_extended.html" title="POSIX Extended Regular Expression Syntax">POSIX + extended regular expression guide</a> for more information. + </p> + <p> + In addition some perl-style escape sequences are supported (The + POSIX standard specifies that only "special" characters + may be escaped, all other escape sequences result in undefined + behavior). + </p> + </td> +</tr> +<tr> +<td> + <p> + egrep + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the grammar recognized by the regular expression + engine is the same as that used by POSIX utility grep when given + the -E option in IEEE Std 1003.1-2001, Portable Operating System + Interface (POSIX ), Shells and Utilities, Section 4, Utilities, + grep (FWD.1). + </p> + <p> + That is to say, the same as <a class="link" href="../../syntax/basic_extended.html" title="POSIX Extended Regular Expression Syntax">POSIX + extended syntax</a>, but with the newline character acting + as an alternation character in addition to "|". + </p> + </td> +</tr> +<tr> +<td> + <p> + awk + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the grammar recognized by the regular expression + engine is the same as that used by POSIX utility awk in IEEE + Std 1003.1-2001, Portable Operating System Interface (POSIX ), + Shells and Utilities, Section 4, awk (FWD.1). + </p> + <p> + That is to say: the same as <a class="link" href="../../syntax/basic_extended.html" title="POSIX Extended Regular Expression Syntax">POSIX + extended syntax</a>, but with escape sequences in character + classes permitted. + </p> + <p> + In addition some perl-style escape sequences are supported (actually + the awk syntax only requires \a \b \t \v \f \n and \r to be recognised, + all other Perl-style escape sequences invoke undefined behavior + according to the POSIX standard, but are in fact recognised by + Boost.Regex). + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + The following options may also be set when using POSIX extended regular + expressions: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Standardized + </p> + </th> +<th> + <p> + Effect when set + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + icase + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that matching of regular expressions against a character + container sequence shall be performed without regard to case. + </p> + </td> +</tr> +<tr> +<td> + <p> + nosubs + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that when a regular expression is matched against a + character container sequence, then no sub-expression matches + are to be stored in the supplied <a class="link" href="../match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> structure. + </p> + </td> +</tr> +<tr> +<td> + <p> + optimize + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the regular expression engine should pay more + attention to the speed with which regular expressions are matched, + and less to the speed with which regular expression objects are + constructed. Otherwise it has no detectable effect on the program + output. This currently has no effect for Boost.Regex. + </p> + </td> +</tr> +<tr> +<td> + <p> + collate + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that character ranges of the form <code class="computeroutput"><span class="special">[</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">b</span><span class="special">]</span></code> + should be locale sensitive. This bit is on by default for POSIX-Extended + regular expressions, but can be unset to force ranges to be compared + by code point only. + </p> + </td> +</tr> +<tr> +<td> + <p> + newline_alt + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Specifies that the \n character has the same effect as the alternation + operator |. Allows newline separated lists to be used as a list + of alternatives. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_escape_in_lists + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set this makes the escape character ordinary inside lists, + so that <code class="computeroutput"><span class="special">[\</span><span class="identifier">b</span><span class="special">]</span></code> would match either '\' or 'b'. + This bit is on by default for POSIX-Extended regular expressions, + but can be unset to force escapes to be recognised inside lists. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_bk_refs + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then backreferences are disabled. This bit is on by + default for POSIX-Extended regular expressions, but can be unset + to support for backreferences on. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_except + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Prevents <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> from throwing + an exception when an invalid expression is encountered. + </p> + </td> +</tr> +<tr> +<td> + <p> + save_subexpression_location + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then the locations of individual sub-expressions within + the <span class="emphasis"><em>original regular expression string</em></span> can + be accessed via the <a class="link" href="../basic_regex.html#boost_regex.basic_regex.subexpression"><code class="computeroutput"><span class="identifier">subexpression</span><span class="special">()</span></code></a> + member function of <code class="computeroutput"><span class="identifier">basic_regex</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_perl.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_basic.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_literal.html b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_literal.html new file mode 100644 index 0000000000..2060e20c16 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_literal.html @@ -0,0 +1,157 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Options for Literal Strings</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax_option_type.html" title="syntax_option_type"> +<link rel="prev" href="syntax_option_type_basic.html" title="Options for POSIX Basic Regular Expressions"> +<link rel="next" href="../match_flag_type.html" title="match_flag_type"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_basic.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../match_flag_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.syntax_option_type.syntax_option_type_literal"></a><a class="link" href="syntax_option_type_literal.html" title="Options for Literal Strings">Options + for Literal Strings</a> +</h4></div></div></div> +<p> + The following must always be set to interpret the expression as a string + literal: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Standardized + </p> + </th> +<th> + <p> + Effect when set + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + literal + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Treat the string as a literal (no special characters). + </p> + </td> +</tr></tbody> +</table></div> +<p> + The following options may also be combined with the literal flag: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Standardized + </p> + </th> +<th> + <p> + Effect when set + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + icase + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that matching of regular expressions against a character + container sequence shall be performed without regard to case. + </p> + </td> +</tr> +<tr> +<td> + <p> + optimize + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the regular expression engine should pay more + attention to the speed with which regular expressions are matched, + and less to the speed with which regular expression objects are + constructed. Otherwise it has no detectable effect on the program + output. This currently has no effect for Boost.Regex. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_basic.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../match_flag_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_overview.html b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_overview.html new file mode 100644 index 0000000000..1c596b9a2a --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_overview.html @@ -0,0 +1,74 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Overview of syntax_option_type</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax_option_type.html" title="syntax_option_type"> +<link rel="prev" href="syntax_option_type_synopsis.html" title="syntax_option_type Synopsis"> +<link rel="next" href="syntax_option_type_perl.html" title="Options for Perl Regular Expressions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_synopsis.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_perl.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.syntax_option_type.syntax_option_type_overview"></a><a class="link" href="syntax_option_type_overview.html" title="Overview of syntax_option_type">Overview + of syntax_option_type</a> +</h4></div></div></div> +<p> + The type <a class="link" href="../syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> is an implementation + specific bitmask type (see C++ standard 17.3.2.1.2). Setting its elements + has the effects listed in the table below, a valid value of type <a class="link" href="../syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> + will always have exactly one of the elements <code class="computeroutput"><span class="identifier">normal</span></code>, + <code class="computeroutput"><span class="identifier">basic</span></code>, <code class="computeroutput"><span class="identifier">extended</span></code>, + <code class="computeroutput"><span class="identifier">awk</span></code>, <code class="computeroutput"><span class="identifier">grep</span></code>, + <code class="computeroutput"><span class="identifier">egrep</span></code>, <code class="computeroutput"><span class="identifier">sed</span></code>, + <code class="computeroutput"><span class="identifier">literal</span></code> or <code class="computeroutput"><span class="identifier">perl</span></code> set. + </p> +<p> + Note that for convenience all the constants listed here are duplicated + within the scope of class template <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>, so you can use any + of: + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">constant_name</span> +</pre> +<p> + or + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">constant_name</span> +</pre> +<p> + or + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">wregex</span><span class="special">::</span><span class="identifier">constant_name</span> +</pre> +<p> + in an interchangeable manner. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_synopsis.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_perl.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_perl.html b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_perl.html new file mode 100644 index 0000000000..9d032204d5 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_perl.html @@ -0,0 +1,427 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Options for Perl Regular Expressions</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax_option_type.html" title="syntax_option_type"> +<link rel="prev" href="syntax_option_type_overview.html" title="Overview of syntax_option_type"> +<link rel="next" href="syntax_option_type_extended.html" title="Options for POSIX Extended Regular Expressions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_overview.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_extended.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.syntax_option_type.syntax_option_type_perl"></a><a class="link" href="syntax_option_type_perl.html" title="Options for Perl Regular Expressions">Options + for Perl Regular Expressions</a> +</h4></div></div></div> +<p> + One of the following must always be set for perl regular expressions: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Standardized + </p> + </th> +<th> + <p> + Effect when set + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + ECMAScript + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the grammar recognized by the regular expression + engine uses its normal semantics: that is the same as that given + in the ECMA-262, ECMAScript Language Specification, Chapter 15 + part 10, RegExp (Regular Expression) Objects (FWD.1). + </p> + <p> + This is functionally identical to the <a class="link" href="../../syntax/perl_syntax.html" title="Perl Regular Expression Syntax">Perl + regular expression syntax</a>. + </p> + <p> + Boost.Regex also recognizes all of the perl-compatible <code class="computeroutput"><span class="special">(?...)</span></code> extensions in this mode. + </p> + </td> +</tr> +<tr> +<td> + <p> + perl + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + As above. + </p> + </td> +</tr> +<tr> +<td> + <p> + normal + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + As above. + </p> + </td> +</tr> +<tr> +<td> + <p> + JavaScript + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + As above. + </p> + </td> +</tr> +<tr> +<td> + <p> + JScript + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + As above. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + The following options may also be set when using perl-style regular expressions: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Element + </p> + </th> +<th> + <p> + Standardized + </p> + </th> +<th> + <p> + Effect when set + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + icase + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that matching of regular expressions against a character + container sequence shall be performed without regard to case. + </p> + </td> +</tr> +<tr> +<td> + <p> + nosubs + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that when a regular expression is matched against a + character container sequence, then no sub-expression matches + are to be stored in the supplied <a class="link" href="../match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> structure. + </p> + </td> +</tr> +<tr> +<td> + <p> + optimize + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that the regular expression engine should pay more + attention to the speed with which regular expressions are matched, + and less to the speed with which regular expression objects are + constructed. Otherwise it has no detectable effect on the program + output. This currently has no effect for Boost.Regex. + </p> + </td> +</tr> +<tr> +<td> + <p> + collate + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Specifies that character ranges of the form <code class="computeroutput"><span class="special">[</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">b</span><span class="special">]</span></code> + should be locale sensitive. + </p> + </td> +</tr> +<tr> +<td> + <p> + newline_alt + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Specifies that the \n character has the same effect as the alternation + operator |. Allows newline separated lists to be used as a list + of alternatives. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_except + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Prevents <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> from throwing + an exception when an invalid expression is encountered. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_mod_m + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Normally Boost.Regex behaves as if the Perl m-modifier is on: + so the assertions ^ and $ match after and before embedded newlines + respectively, setting this flags is equivalent to prefixing the + expression with (?-m). + </p> + </td> +</tr> +<tr> +<td> + <p> + no_mod_s + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Normally whether Boost.Regex will match "." against + a newline character is determined by the match flag <code class="computeroutput"><span class="identifier">match_dot_not_newline</span></code>. Specifying + this flag is equivalent to prefixing the expression with <code class="computeroutput"><span class="special">(?-</span><span class="identifier">s</span><span class="special">)</span></code> and therefore causes "." + not to match a newline character regardless of whether <code class="computeroutput"><span class="identifier">match_not_dot_newline</span></code> is set + in the match flags. + </p> + </td> +</tr> +<tr> +<td> + <p> + mod_s + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Normally whether Boost.Regex will match "." against + a newline character is determined by the match flag <code class="computeroutput"><span class="identifier">match_dot_not_newline</span></code>. Specifying + this flag is equivalent to prefixing the expression with <code class="computeroutput"><span class="special">(?</span><span class="identifier">s</span><span class="special">)</span></code> and therefore causes "." + to match a newline character regardless of whether <code class="computeroutput"><span class="identifier">match_not_dot_newline</span></code> is set + in the match flags. + </p> + </td> +</tr> +<tr> +<td> + <p> + mod_x + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Turns on the perl x-modifier: causes unescaped whitespace in + the expression to be ignored. + </p> + </td> +</tr> +<tr> +<td> + <p> + no_empty_expressions + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then empty expressions/alternatives are prohibited. + </p> + </td> +</tr> +<tr> +<td> + <p> + save_subexpression_location + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + When set then the locations of individual sub-expressions within + the <span class="emphasis"><em>original regular expression string</em></span> can + be accessed via the <a class="link" href="../basic_regex.html#boost_regex.basic_regex.subexpression"><code class="computeroutput"><span class="identifier">subexpression</span><span class="special">()</span></code></a> + member function of <code class="computeroutput"><span class="identifier">basic_regex</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="syntax_option_type_overview.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_extended.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_synopsis.html b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_synopsis.html new file mode 100644 index 0000000000..58e12b877a --- /dev/null +++ b/libs/regex/doc/html/boost_regex/ref/syntax_option_type/syntax_option_type_synopsis.html @@ -0,0 +1,102 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>syntax_option_type Synopsis</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax_option_type.html" title="syntax_option_type"> +<link rel="prev" href="../syntax_option_type.html" title="syntax_option_type"> +<link rel="next" href="syntax_option_type_overview.html" title="Overview of syntax_option_type"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_overview.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.ref.syntax_option_type.syntax_option_type_synopsis"></a><a class="link" href="syntax_option_type_synopsis.html" title="syntax_option_type Synopsis">syntax_option_type + Synopsis</a> +</h4></div></div></div> +<p> + Type <a class="link" href="../syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a> + is an implementation specific bitmask type that controls how a regular + expression string is to be interpreted. For convenience note that all the + constants listed here, are also duplicated within the scope of class template + <a class="link" href="../basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a>. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">regex_constants</span><span class="special">{</span> + +<span class="keyword">typedef</span> <span class="identifier">implementation</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">bitmask</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">syntax_option_type</span><span class="special">;</span> + +<span class="comment">// these flags are standardized:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">ECMAScript</span> <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">JavaScript</span> <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">JScript</span> <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">perl</span> <span class="special">=</span> <span class="identifier">normal</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">basic</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">sed</span> <span class="special">=</span> <span class="identifier">basic</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">extended</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">awk</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">grep</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">egrep</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">icase</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">nosubs</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">optimize</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">collate</span><span class="special">;</span> + +<span class="comment">// </span> +<span class="comment">// The remaining options are specific to Boost.Regex:</span> +<span class="comment">//</span> + +<span class="comment">// Options common to both Perl and POSIX regular expressions:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">newline_alt</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_except</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">save_subexpression_location</span><span class="special">;</span> + +<span class="comment">// Perl specific options:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_mod_m</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_mod_s</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">mod_s</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">mod_x</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_empty_expressions</span><span class="special">;</span> + +<span class="comment">// POSIX extended specific options:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_escape_in_lists</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_bk_refs</span><span class="special">;</span> + +<span class="comment">// POSIX basic specific options:</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_escape_in_lists</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_char_classes</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">no_intervals</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">bk_plus_qm</span><span class="special">;</span> +<span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">syntax_option_type</span> <span class="identifier">bk_vbar</span><span class="special">;</span> + +<span class="special">}</span> <span class="comment">// namespace regex_constants</span> +<span class="special">}</span> <span class="comment">// namespace std</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax_option_type.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax_option_type_overview.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax.html b/libs/regex/doc/html/boost_regex/syntax.html new file mode 100644 index 0000000000..9289a0d0ac --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax.html @@ -0,0 +1,96 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Regular Expression Syntax</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="partial_matches.html" title="Partial Matches"> +<link rel="next" href="syntax/perl_syntax.html" title="Perl Regular Expression Syntax"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="partial_matches.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax/perl_syntax.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.syntax"></a><a class="link" href="syntax.html" title="Regular Expression Syntax">Regular Expression Syntax</a> +</h2></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="syntax/perl_syntax.html">Perl Regular Expression + Syntax</a></span></dt> +<dt><span class="section"><a href="syntax/basic_extended.html">POSIX Extended Regular + Expression Syntax</a></span></dt> +<dt><span class="section"><a href="syntax/basic_syntax.html">POSIX Basic Regular + Expression Syntax</a></span></dt> +<dt><span class="section"><a href="syntax/character_classes.html">Character Class + Names</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="syntax/character_classes/std_char_clases.html">Character + Classes that are Always Supported</a></span></dt> +<dt><span class="section"><a href="syntax/character_classes/optional_char_class_names.html">Character + classes that are supported by Unicode Regular Expressions</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="syntax/collating_names.html">Collating Names</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="syntax/collating_names/digraphs.html">Digraphs</a></span></dt> +<dt><span class="section"><a href="syntax/collating_names/posix_symbolic_names.html">POSIX + Symbolic Names</a></span></dt> +<dt><span class="section"><a href="syntax/collating_names/named_unicode.html">Named + Unicode Characters</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="syntax/leftmost_longest_rule.html">The Leftmost + Longest Rule</a></span></dt> +</dl></div> +<p> + This section covers the regular expression syntax used by this library, this + is a programmers guide, the actual syntax presented to your program's users + will depend upon the flags used during expression compilation. + </p> +<p> + There are three main syntax options available, depending upon how you construct + the regular expression object: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <a class="link" href="syntax/perl_syntax.html" title="Perl Regular Expression Syntax">Perl (this is the default + behavior)</a>. + </li> +<li class="listitem"> + <a class="link" href="syntax/basic_extended.html" title="POSIX Extended Regular Expression Syntax">POSIX extended (including + the egrep and awk variations)</a>. + </li> +<li class="listitem"> + <a class="link" href="syntax/basic_syntax.html" title="POSIX Basic Regular Expression Syntax">POSIX Basic (including + the grep and emacs variations)</a>. + </li> +</ul></div> +<p> + You can also construct a regular expression that treats every character as + a literal, but that's not really a "syntax"! + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="partial_matches.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="syntax/perl_syntax.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/basic_extended.html b/libs/regex/doc/html/boost_regex/syntax/basic_extended.html new file mode 100644 index 0000000000..a835f57d69 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/basic_extended.html @@ -0,0 +1,1198 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>POSIX Extended Regular Expression Syntax</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax.html" title="Regular Expression Syntax"> +<link rel="prev" href="perl_syntax.html" title="Perl Regular Expression Syntax"> +<link rel="next" href="basic_syntax.html" title="POSIX Basic Regular Expression Syntax"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="perl_syntax.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="basic_syntax.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.syntax.basic_extended"></a><a class="link" href="basic_extended.html" title="POSIX Extended Regular Expression Syntax">POSIX Extended Regular + Expression Syntax</a> +</h3></div></div></div> +<h4> +<a name="boost_regex.syntax.basic_extended.h0"></a> + <span><a name="boost_regex.syntax.basic_extended.synopsis"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.synopsis">Synopsis</a> + </h4> +<p> + The POSIX-Extended regular expression syntax is supported by the POSIX C + regular expression API's, and variations are used by the utilities <code class="computeroutput"><span class="identifier">egrep</span></code> and <code class="computeroutput"><span class="identifier">awk</span></code>. + You can construct POSIX extended regular expressions in Boost.Regex by passing + the flag <code class="computeroutput"><span class="identifier">extended</span></code> to the + regex constructor, for example: + </p> +<pre class="programlisting"><span class="comment">// e1 is a case sensitive POSIX-Extended expression:</span> +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e1</span><span class="special">(</span><span class="identifier">my_expression</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">extended</span><span class="special">);</span> +<span class="comment">// e2 a case insensitive POSIX-Extended expression:</span> +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e2</span><span class="special">(</span><span class="identifier">my_expression</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">extended</span><span class="special">|</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">icase</span><span class="special">);</span> +</pre> +<a name="boost_regex.posix_extended_syntax"></a><h4> +<a name="boost_regex.syntax.basic_extended.h1"></a> + <span><a name="boost_regex.syntax.basic_extended.posix_extended_syntax"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.posix_extended_syntax">POSIX Extended + Syntax</a> + </h4> +<p> + In POSIX-Extended regular expressions, all characters match themselves except + for the following special characters: + </p> +<pre class="programlisting">.[{}()\*+?|^$</pre> +<h5> +<a name="boost_regex.syntax.basic_extended.h2"></a> + <span><a name="boost_regex.syntax.basic_extended.wildcard_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.wildcard_">Wildcard:</a> + </h5> +<p> + The single character '.' when used outside of a character set will match + any single character except: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + The NULL character when the flag <code class="computeroutput"><span class="identifier">match_no_dot_null</span></code> + is passed to the matching algorithms. + </li> +<li class="listitem"> + The newline character when the flag <code class="computeroutput"><span class="identifier">match_not_dot_newline</span></code> + is passed to the matching algorithms. + </li> +</ul></div> +<h5> +<a name="boost_regex.syntax.basic_extended.h3"></a> + <span><a name="boost_regex.syntax.basic_extended.anchors_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.anchors_">Anchors:</a> + </h5> +<p> + A '^' character shall match the start of a line when used as the first character + of an expression, or the first character of a sub-expression. + </p> +<p> + A '$' character shall match the end of a line when used as the last character + of an expression, or the last character of a sub-expression. + </p> +<h5> +<a name="boost_regex.syntax.basic_extended.h4"></a> + <span><a name="boost_regex.syntax.basic_extended.marked_sub_expressions_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.marked_sub_expressions_">Marked + sub-expressions:</a> + </h5> +<p> + A section beginning <code class="computeroutput"><span class="special">(</span></code> and ending + <code class="computeroutput"><span class="special">)</span></code> acts as a marked sub-expression. + Whatever matched the sub-expression is split out in a separate field by the + matching algorithms. Marked sub-expressions can also repeated, or referred + to by a back-reference. + </p> +<h5> +<a name="boost_regex.syntax.basic_extended.h5"></a> + <span><a name="boost_regex.syntax.basic_extended.repeats_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.repeats_">Repeats:</a> + </h5> +<p> + Any atom (a single character, a marked sub-expression, or a character class) + can be repeated with the <code class="computeroutput"><span class="special">*</span></code>, + <code class="computeroutput"><span class="special">+</span></code>, <code class="computeroutput"><span class="special">?</span></code>, + and <code class="computeroutput"><span class="special">{}</span></code> operators. + </p> +<p> + The <code class="computeroutput"><span class="special">*</span></code> operator will match the + preceding atom <span class="emphasis"><em>zero or more times</em></span>, for example the expression + <code class="computeroutput"><span class="identifier">a</span><span class="special">*</span><span class="identifier">b</span></code> will match any of the following: + </p> +<pre class="programlisting">b +ab +aaaaaaaab +</pre> +<p> + The <code class="computeroutput"><span class="special">+</span></code> operator will match the + preceding atom <span class="emphasis"><em>one or more times</em></span>, for example the expression + a+b will match any of the following: + </p> +<pre class="programlisting">ab +aaaaaaaab +</pre> +<p> + But will not match: + </p> +<pre class="programlisting">b +</pre> +<p> + The <code class="computeroutput"><span class="special">?</span></code> operator will match the + preceding atom <span class="emphasis"><em>zero or one times</em></span>, for example the expression + <code class="computeroutput"><span class="identifier">ca</span><span class="special">?</span><span class="identifier">b</span></code> will match any of the following: + </p> +<pre class="programlisting">cb +cab +</pre> +<p> + But will not match: + </p> +<pre class="programlisting">caab +</pre> +<p> + An atom can also be repeated with a bounded repeat: + </p> +<p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">{</span><span class="identifier">n</span><span class="special">}</span></code> Matches + 'a' repeated <span class="emphasis"><em>exactly n times</em></span>. + </p> +<p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">{</span><span class="identifier">n</span><span class="special">,}</span></code> Matches + 'a' repeated <span class="emphasis"><em>n or more times</em></span>. + </p> +<p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">{</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">m</span><span class="special">}</span></code> Matches 'a' repeated <span class="emphasis"><em>between n + and m times inclusive</em></span>. + </p> +<p> + For example: + </p> +<pre class="programlisting">^a{2,3}$</pre> +<p> + Will match either of: + </p> +<pre class="programlisting"><span class="identifier">aa</span> +<span class="identifier">aaa</span> +</pre> +<p> + But neither of: + </p> +<pre class="programlisting"><span class="identifier">a</span> +<span class="identifier">aaaa</span> +</pre> +<p> + It is an error to use a repeat operator, if the preceding construct can not + be repeated, for example: + </p> +<pre class="programlisting"><span class="identifier">a</span><span class="special">(*)</span> +</pre> +<p> + Will raise an error, as there is nothing for the <code class="computeroutput"><span class="special">*</span></code> + operator to be applied to. + </p> +<h5> +<a name="boost_regex.syntax.basic_extended.h6"></a> + <span><a name="boost_regex.syntax.basic_extended.back_references_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.back_references_">Back + references:</a> + </h5> +<p> + An escape character followed by a digit <span class="emphasis"><em>n</em></span>, where <span class="emphasis"><em>n</em></span> + is in the range 1-9, matches the same string that was matched by sub-expression + <span class="emphasis"><em>n</em></span>. For example the expression: + </p> +<pre class="programlisting">^(a*).*\1$</pre> +<p> + Will match the string: + </p> +<pre class="programlisting"><span class="identifier">aaabbaaa</span> +</pre> +<p> + But not the string: + </p> +<pre class="programlisting"><span class="identifier">aaabba</span> +</pre> +<div class="caution"><table border="0" summary="Caution"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../doc/src/images/caution.png"></td> +<th align="left">Caution</th> +</tr> +<tr><td align="left" valign="top"><p> + The POSIX standard does not support back-references for "extended" + regular expressions, this is a compatible extension to that standard. + </p></td></tr> +</table></div> +<h5> +<a name="boost_regex.syntax.basic_extended.h7"></a> + <span><a name="boost_regex.syntax.basic_extended.alternation"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.alternation">Alternation</a> + </h5> +<p> + The <code class="computeroutput"><span class="special">|</span></code> operator will match either + of its arguments, so for example: <code class="computeroutput"><span class="identifier">abc</span><span class="special">|</span><span class="identifier">def</span></code> will + match either "abc" or "def". + </p> +<p> + Parenthesis can be used to group alternations, for example: <code class="computeroutput"><span class="identifier">ab</span><span class="special">(</span><span class="identifier">d</span><span class="special">|</span><span class="identifier">ef</span><span class="special">)</span></code> + will match either of "abd" or "abef". + </p> +<h5> +<a name="boost_regex.syntax.basic_extended.h8"></a> + <span><a name="boost_regex.syntax.basic_extended.character_sets_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.character_sets_">Character + sets:</a> + </h5> +<p> + A character set is a bracket-expression starting with [ and ending with ], + it defines a set of characters, and matches any single character that is + a member of that set. + </p> +<p> + A bracket expression may contain any combination of the following: + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h9"></a> + <span><a name="boost_regex.syntax.basic_extended.single_characters_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.single_characters_">Single characters:</a> + </h6> +<p> + For example <code class="computeroutput"><span class="special">[</span><span class="identifier">abc</span><span class="special">]</span></code>, will match any of the characters 'a', 'b', + or 'c'. + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h10"></a> + <span><a name="boost_regex.syntax.basic_extended.character_ranges_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.character_ranges_">Character + ranges:</a> + </h6> +<p> + For example <code class="computeroutput"><span class="special">[</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">]</span></code> + will match any single character in the range 'a' to 'c'. By default, for + POSIX-Extended regular expressions, a character <span class="emphasis"><em>x</em></span> is + within the range <span class="emphasis"><em>y</em></span> to <span class="emphasis"><em>z</em></span>, if it + collates within that range; this results in locale specific behavior . This + behavior can be turned off by unsetting the <code class="computeroutput"><span class="identifier">collate</span></code> + <a class="link" href="../ref/syntax_option_type.html" title="syntax_option_type">option flag</a> - in + which case whether a character appears within a range is determined by comparing + the code points of the characters only. + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h11"></a> + <span><a name="boost_regex.syntax.basic_extended.negation_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.negation_">Negation:</a> + </h6> +<p> + If the bracket-expression begins with the ^ character, then it matches the + complement of the characters it contains, for example <code class="computeroutput"><span class="special">[^</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">]</span></code> matches any character that is not in the + range <code class="computeroutput"><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span></code>. + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h12"></a> + <span><a name="boost_regex.syntax.basic_extended.character_classes_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.character_classes_">Character + classes:</a> + </h6> +<p> + An expression of the form <code class="computeroutput"><span class="special">[[:</span><span class="identifier">name</span><span class="special">:]]</span></code> + matches the named character class "name", for example <code class="computeroutput"><span class="special">[[:</span><span class="identifier">lower</span><span class="special">:]]</span></code> matches any lower case character. See + <a class="link" href="character_classes.html" title="Character Class Names">character class names</a>. + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h13"></a> + <span><a name="boost_regex.syntax.basic_extended.collating_elements_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.collating_elements_">Collating + Elements:</a> + </h6> +<p> + An expression of the form <code class="computeroutput"><span class="special">[[.</span><span class="identifier">col</span><span class="special">.]</span></code> matches + the collating element <span class="emphasis"><em>col</em></span>. A collating element is any + single character, or any sequence of characters that collates as a single + unit. Collating elements may also be used as the end point of a range, for + example: <code class="computeroutput"><span class="special">[[.</span><span class="identifier">ae</span><span class="special">.]-</span><span class="identifier">c</span><span class="special">]</span></code> + matches the character sequence "ae", plus any single character + in the range "ae"-c, assuming that "ae" is treated as + a single collating element in the current locale. + </p> +<p> + Collating elements may be used in place of escapes (which are not normally + allowed inside character sets), for example <code class="computeroutput"><span class="special">[[.^.]</span><span class="identifier">abc</span><span class="special">]</span></code> would + match either one of the characters 'abc^'. + </p> +<p> + As an extension, a collating element may also be specified via its <a class="link" href="collating_names.html" title="Collating Names">symbolic name</a>, for example: + </p> +<pre class="programlisting"><span class="special">[[.</span><span class="identifier">NUL</span><span class="special">.]]</span> +</pre> +<p> + matches a NUL character. + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h14"></a> + <span><a name="boost_regex.syntax.basic_extended.equivalence_classes_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.equivalence_classes_">Equivalence + classes:</a> + </h6> +<p> + An expression of the form <code class="computeroutput"><span class="special">[[=</span><span class="identifier">col</span><span class="special">=]]</span></code>, + matches any character or collating element whose primary sort key is the + same as that for collating element <span class="emphasis"><em>col</em></span>, as with colating + elements the name <span class="emphasis"><em>col</em></span> may be a <a class="link" href="collating_names.html" title="Collating Names">symbolic + name</a>. A primary sort key is one that ignores case, accentation, or + locale-specific tailorings; so for example <code class="computeroutput"><span class="special">[[=</span><span class="identifier">a</span><span class="special">=]]</span></code> matches + any of the characters: a, À, Á, Â, Ã, Ä, Å, A, à, á, â, ã, ä and å. Unfortunately implementation + of this is reliant on the platform's collation and localisation support; + this feature can not be relied upon to work portably across all platforms, + or even all locales on one platform. + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h15"></a> + <span><a name="boost_regex.syntax.basic_extended.combinations_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.combinations_">Combinations:</a> + </h6> +<p> + All of the above can be combined in one character set declaration, for example: + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">[.</span><span class="identifier">NUL</span><span class="special">.]]</span></code>. + </p> +<h5> +<a name="boost_regex.syntax.basic_extended.h16"></a> + <span><a name="boost_regex.syntax.basic_extended.escapes"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.escapes">Escapes</a> + </h5> +<p> + The POSIX standard defines no escape sequences for POSIX-Extended regular + expressions, except that: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + Any special character preceded by an escape shall match itself. + </li> +<li class="listitem"> + The effect of any ordinary character being preceded by an escape is undefined. + </li> +<li class="listitem"> + An escape inside a character class declaration shall match itself: in + other words the escape character is not "special" inside a + character class declaration; so <code class="computeroutput"><span class="special">[\^]</span></code> + will match either a literal '\' or a '^'. + </li> +</ul></div> +<p> + However, that's rather restrictive, so the following standard-compatible + extensions are also supported by Boost.Regex: + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h17"></a> + <span><a name="boost_regex.syntax.basic_extended.escapes_matching_a_specific_character"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.escapes_matching_a_specific_character">Escapes + matching a specific character</a> + </h6> +<p> + The following escape sequences are all synonyms for single characters: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Character + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + \a + </p> + </td> +<td> + <p> + '\a' + </p> + </td> +</tr> +<tr> +<td> + <p> + \e + </p> + </td> +<td> + <p> + 0x1B + </p> + </td> +</tr> +<tr> +<td> + <p> + \f + </p> + </td> +<td> + <p> + \f + </p> + </td> +</tr> +<tr> +<td> + <p> + \n + </p> + </td> +<td> + <p> + \n + </p> + </td> +</tr> +<tr> +<td> + <p> + \r + </p> + </td> +<td> + <p> + \r + </p> + </td> +</tr> +<tr> +<td> + <p> + \t + </p> + </td> +<td> + <p> + \t + </p> + </td> +</tr> +<tr> +<td> + <p> + \v + </p> + </td> +<td> + <p> + \v + </p> + </td> +</tr> +<tr> +<td> + <p> + \b + </p> + </td> +<td> + <p> + \b (but only inside a character class declaration). + </p> + </td> +</tr> +<tr> +<td> + <p> + \cX + </p> + </td> +<td> + <p> + An ASCII escape sequence - the character whose code point is X + % 32 + </p> + </td> +</tr> +<tr> +<td> + <p> + \xdd + </p> + </td> +<td> + <p> + A hexadecimal escape sequence - matches the single character whose + code point is 0xdd. + </p> + </td> +</tr> +<tr> +<td> + <p> + \x{dddd} + </p> + </td> +<td> + <p> + A hexadecimal escape sequence - matches the single character whose + code point is 0xdddd. + </p> + </td> +</tr> +<tr> +<td> + <p> + \0ddd + </p> + </td> +<td> + <p> + An octal escape sequence - matches the single character whose code + point is 0ddd. + </p> + </td> +</tr> +<tr> +<td> + <p> + \N{Name} + </p> + </td> +<td> + <p> + Matches the single character which has the symbolic name name. + For example <code class="computeroutput"><span class="special">\\</span><span class="identifier">N</span><span class="special">{</span><span class="identifier">newline</span><span class="special">}</span></code> matches the single character \n. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="boost_regex.syntax.basic_extended.h18"></a> + <span><a name="boost_regex.syntax.basic_extended._quot_single_character_quot__character_classes_"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended._quot_single_character_quot__character_classes_">"Single + character" character classes:</a> + </h6> +<p> + Any escaped character <span class="emphasis"><em>x</em></span>, if <span class="emphasis"><em>x</em></span> is + the name of a character class shall match any character that is a member + of that class, and any escaped character <span class="emphasis"><em>X</em></span>, if <span class="emphasis"><em>x</em></span> + is the name of a character class, shall match any character not in that class. + </p> +<p> + The following are supported by default: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape sequence + </p> + </th> +<th> + <p> + Equivalent to + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">d</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">l</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">lower</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">s</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">space</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">u</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">upper</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">w</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">word</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">D</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">digit</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">L</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">lower</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">S</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">space</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">U</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">upper</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">W</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">word</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="boost_regex.syntax.basic_extended.h19"></a> + <span><a name="boost_regex.syntax.basic_extended.character_properties"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.character_properties">Character + Properties</a> + </h6> +<p> + The character property names in the following table are all equivalent to + the names used in character classes. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Form + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Equivalent character set form + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">pX</span></code> + </p> + </td> +<td> + <p> + Matches any character that has the property X. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">X</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">p</span><span class="special">{</span><span class="identifier">Name</span><span class="special">}</span></code> + </p> + </td> +<td> + <p> + Matches any character that has the property Name. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">Name</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">PX</span></code> + </p> + </td> +<td> + <p> + Matches any character that does not have the property X. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">X</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">P</span><span class="special">{</span><span class="identifier">Name</span><span class="special">}</span></code> + </p> + </td> +<td> + <p> + Matches any character that does not have the property Name. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">Name</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + For example <code class="computeroutput"><span class="special">\</span><span class="identifier">pd</span></code> + matches any "digit" character, as does <code class="computeroutput"><span class="special">\</span><span class="identifier">p</span><span class="special">{</span><span class="identifier">digit</span><span class="special">}</span></code>. + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h20"></a> + <span><a name="boost_regex.syntax.basic_extended.word_boundaries"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.word_boundaries">Word + Boundaries</a> + </h6> +<p> + The following escape sequences match the boundaries of words: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\<</span></code> + </p> + </td> +<td> + <p> + Matches the start of a word. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\></span></code> + </p> + </td> +<td> + <p> + Matches the end of a word. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">b</span></code> + </p> + </td> +<td> + <p> + Matches a word boundary (the start or end of a word). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">B</span></code> + </p> + </td> +<td> + <p> + Matches only when not at a word boundary. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="boost_regex.syntax.basic_extended.h21"></a> + <span><a name="boost_regex.syntax.basic_extended.buffer_boundaries"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.buffer_boundaries">Buffer + boundaries</a> + </h6> +<p> + The following match only at buffer boundaries: a "buffer" in this + context is the whole of the input text that is being matched against (note + that ^ and $ may match embedded newlines within the text). + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + \` + </p> + </td> +<td> + <p> + Matches at the start of a buffer only. + </p> + </td> +</tr> +<tr> +<td> + <p> + \' + </p> + </td> +<td> + <p> + Matches at the end of a buffer only. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">A</span></code> + </p> + </td> +<td> + <p> + Matches at the start of a buffer only (the same as \`). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">z</span></code> + </p> + </td> +<td> + <p> + Matches at the end of a buffer only (the same as \'). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">Z</span></code> + </p> + </td> +<td> + <p> + Matches an optional sequence of newlines at the end of a buffer: + equivalent to the regular expression <code class="computeroutput"><span class="special">\</span><span class="identifier">n</span><span class="special">*\</span><span class="identifier">z</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="boost_regex.syntax.basic_extended.h22"></a> + <span><a name="boost_regex.syntax.basic_extended.continuation_escape"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.continuation_escape">Continuation + Escape</a> + </h6> +<p> + The sequence <code class="computeroutput"><span class="special">\</span><span class="identifier">G</span></code> + matches only at the end of the last match found, or at the start of the text + being matched if no previous match was found. This escape useful if you're + iterating over the matches contained within a text, and you want each subsequence + match to start where the last one ended. + </p> +<h6> +<a name="boost_regex.syntax.basic_extended.h23"></a> + <span><a name="boost_regex.syntax.basic_extended.quoting_escape"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.quoting_escape">Quoting + escape</a> + </h6> +<p> + The escape sequence <code class="computeroutput"><span class="special">\</span><span class="identifier">Q</span></code> + begins a "quoted sequence": all the subsequent characters are treated + as literals, until either the end of the regular expression or <code class="computeroutput"><span class="special">\</span><span class="identifier">E</span></code> is found. + For example the expression: <code class="computeroutput"><span class="special">\</span><span class="identifier">Q</span><span class="special">\*+\</span><span class="identifier">Ea</span><span class="special">+</span></code> would match either of: + </p> +<pre class="programlisting"><span class="special">\*+</span><span class="identifier">a</span> +<span class="special">\*+</span><span class="identifier">aaa</span> +</pre> +<h6> +<a name="boost_regex.syntax.basic_extended.h24"></a> + <span><a name="boost_regex.syntax.basic_extended.unicode_escapes"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.unicode_escapes">Unicode + escapes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">C</span></code> + </p> + </td> +<td> + <p> + Matches a single code point: in Boost regex this has exactly the + same effect as a "." operator. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">X</span></code> + </p> + </td> +<td> + <p> + Matches a combining character sequence: that is any non-combining + character followed by a sequence of zero or more combining characters. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="boost_regex.syntax.basic_extended.h25"></a> + <span><a name="boost_regex.syntax.basic_extended.any_other_escape"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.any_other_escape">Any + other escape</a> + </h6> +<p> + Any other escape sequence matches the character that is escaped, for example + \@ matches a literal '@'. + </p> +<h5> +<a name="boost_regex.syntax.basic_extended.h26"></a> + <span><a name="boost_regex.syntax.basic_extended.operator_precedence"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.operator_precedence">Operator + precedence</a> + </h5> +<p> + The order of precedence for of operators is as follows: + </p> +<div class="orderedlist"><ol class="orderedlist" type="1"> +<li class="listitem"> + Collation-related bracket symbols <code class="computeroutput"><span class="special">[==]</span> + <span class="special">[::]</span> <span class="special">[..]</span></code> + </li> +<li class="listitem"> + Escaped characters <code class="computeroutput"><span class="special">\</span></code> + </li> +<li class="listitem"> + Character set (bracket expression) <code class="computeroutput"><span class="special">[]</span></code> + </li> +<li class="listitem"> + Grouping <code class="computeroutput"><span class="special">()</span></code> + </li> +<li class="listitem"> + Single-character-ERE duplication <code class="computeroutput"><span class="special">*</span> + <span class="special">+</span> <span class="special">?</span> + <span class="special">{</span><span class="identifier">m</span><span class="special">,</span><span class="identifier">n</span><span class="special">}</span></code> + </li> +<li class="listitem"> + Concatenation + </li> +<li class="listitem"> + Anchoring ^$ + </li> +<li class="listitem"> + Alternation <code class="computeroutput"><span class="special">|</span></code> + </li> +</ol></div> +<h5> +<a name="boost_regex.syntax.basic_extended.h27"></a> + <span><a name="boost_regex.syntax.basic_extended.what_gets_matched"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.what_gets_matched">What + Gets Matched</a> + </h5> +<p> + When there is more that one way to match a regular expression, the "best" + possible match is obtained using the <a class="link" href="leftmost_longest_rule.html" title="The Leftmost Longest Rule">leftmost-longest + rule</a>. + </p> +<h4> +<a name="boost_regex.syntax.basic_extended.h28"></a> + <span><a name="boost_regex.syntax.basic_extended.variations"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.variations">Variations</a> + </h4> +<h5> +<a name="boost_regex.syntax.basic_extended.h29"></a> + <span><a name="boost_regex.syntax.basic_extended.egrep"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.egrep">Egrep</a> + </h5> +<p> + When an expression is compiled with the <a class="link" href="../ref/syntax_option_type.html" title="syntax_option_type">flag + <code class="computeroutput"><span class="identifier">egrep</span></code></a> set, then the + expression is treated as a newline separated list of <a class="link" href="basic_extended.html#boost_regex.posix_extended_syntax">POSIX-Extended + expressions</a>, a match is found if any of the expressions in the list + match, for example: + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="string">"abc\ndef"</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">egrep</span><span class="special">);</span> +</pre> +<p> + will match either of the POSIX-Basic expressions "abc" or "def". + </p> +<p> + As its name suggests, this behavior is consistent with the Unix utility + <code class="computeroutput"><span class="identifier">egrep</span></code>, and with grep when + used with the -E option. + </p> +<h5> +<a name="boost_regex.syntax.basic_extended.h30"></a> + <span><a name="boost_regex.syntax.basic_extended.awk"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.awk">awk</a> + </h5> +<p> + In addition to the <a class="link" href="basic_extended.html#boost_regex.posix_extended_syntax">POSIX-Extended + features</a> the escape character is special inside a character class + declaration. + </p> +<p> + In addition, some escape sequences that are not defined as part of POSIX-Extended + specification are required to be supported - however Boost.Regex supports + these by default anyway. + </p> +<h4> +<a name="boost_regex.syntax.basic_extended.h31"></a> + <span><a name="boost_regex.syntax.basic_extended.options"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.options">Options</a> + </h4> +<p> + There are a <a class="link" href="../ref/syntax_option_type/syntax_option_type_extended.html" title="Options for POSIX Extended Regular Expressions">variety + of flags</a> that may be combined with the <code class="computeroutput"><span class="identifier">extended</span></code> + and <code class="computeroutput"><span class="identifier">egrep</span></code> options when constructing + the regular expression, in particular note that the <a class="link" href="../ref/syntax_option_type/syntax_option_type_extended.html" title="Options for POSIX Extended Regular Expressions"><code class="computeroutput"><span class="identifier">newline_alt</span></code></a> option alters the syntax, + while the <a class="link" href="../ref/syntax_option_type/syntax_option_type_extended.html" title="Options for POSIX Extended Regular Expressions"><code class="computeroutput"><span class="identifier">collate</span></code>, <code class="computeroutput"><span class="identifier">nosubs</span></code> + and <code class="computeroutput"><span class="identifier">icase</span></code> options</a> + modify how the case and locale sensitivity are to be applied. + </p> +<h4> +<a name="boost_regex.syntax.basic_extended.h32"></a> + <span><a name="boost_regex.syntax.basic_extended.references"></a></span><a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.references">References</a> + </h4> +<p> + <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap09.html" target="_top">IEEE + Std 1003.1-2001, Portable Operating System Interface (POSIX ), Base Definitions + and Headers, Section 9, Regular Expressions.</a> + </p> +<p> + <a href="http://www.opengroup.org/onlinepubs/000095399/utilities/grep.html" target="_top">IEEE + Std 1003.1-2001, Portable Operating System Interface (POSIX ), Shells and + Utilities, Section 4, Utilities, egrep.</a> + </p> +<p> + <a href="http://www.opengroup.org/onlinepubs/000095399/utilities/awk.html" target="_top">IEEE + Std 1003.1-2001, Portable Operating System Interface (POSIX ), Shells and + Utilities, Section 4, Utilities, awk.</a> + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="perl_syntax.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="basic_syntax.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/basic_syntax.html b/libs/regex/doc/html/boost_regex/syntax/basic_syntax.html new file mode 100644 index 0000000000..938f5b4d87 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/basic_syntax.html @@ -0,0 +1,657 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>POSIX Basic Regular Expression Syntax</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax.html" title="Regular Expression Syntax"> +<link rel="prev" href="basic_extended.html" title="POSIX Extended Regular Expression Syntax"> +<link rel="next" href="character_classes.html" title="Character Class Names"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="basic_extended.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="character_classes.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.syntax.basic_syntax"></a><a class="link" href="basic_syntax.html" title="POSIX Basic Regular Expression Syntax">POSIX Basic Regular + Expression Syntax</a> +</h3></div></div></div> +<h4> +<a name="boost_regex.syntax.basic_syntax.h0"></a> + <span><a name="boost_regex.syntax.basic_syntax.synopsis"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.synopsis">Synopsis</a> + </h4> +<p> + The POSIX-Basic regular expression syntax is used by the Unix utility <code class="computeroutput"><span class="identifier">sed</span></code>, and variations are used by <code class="computeroutput"><span class="identifier">grep</span></code> and <code class="computeroutput"><span class="identifier">emacs</span></code>. + You can construct POSIX basic regular expressions in Boost.Regex by passing + the flag <code class="computeroutput"><span class="identifier">basic</span></code> to the regex + constructor (see <a class="link" href="../ref/syntax_option_type.html" title="syntax_option_type"><code class="computeroutput"><span class="identifier">syntax_option_type</span></code></a>), for example: + </p> +<pre class="programlisting"><span class="comment">// e1 is a case sensitive POSIX-Basic expression:</span> +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e1</span><span class="special">(</span><span class="identifier">my_expression</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">basic</span><span class="special">);</span> +<span class="comment">// e2 a case insensitive POSIX-Basic expression:</span> +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e2</span><span class="special">(</span><span class="identifier">my_expression</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">basic</span><span class="special">|</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">icase</span><span class="special">);</span> +</pre> +<a name="boost_regex.posix_basic"></a><h4> +<a name="boost_regex.syntax.basic_syntax.h1"></a> + <span><a name="boost_regex.syntax.basic_syntax.posix_basic_syntax"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.posix_basic_syntax">POSIX + Basic Syntax</a> + </h4> +<p> + In POSIX-Basic regular expressions, all characters are match themselves except + for the following special characters: + </p> +<pre class="programlisting">.[\*^$</pre> +<h5> +<a name="boost_regex.syntax.basic_syntax.h2"></a> + <span><a name="boost_regex.syntax.basic_syntax.wildcard_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.wildcard_">Wildcard:</a> + </h5> +<p> + The single character '.' when used outside of a character set will match + any single character except: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + The NULL character when the flag <code class="computeroutput"><span class="identifier">match_no_dot_null</span></code> + is passed to the matching algorithms. + </li> +<li class="listitem"> + The newline character when the flag <code class="computeroutput"><span class="identifier">match_not_dot_newline</span></code> + is passed to the matching algorithms. + </li> +</ul></div> +<h5> +<a name="boost_regex.syntax.basic_syntax.h3"></a> + <span><a name="boost_regex.syntax.basic_syntax.anchors_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.anchors_">Anchors:</a> + </h5> +<p> + A '^' character shall match the start of a line when used as the first character + of an expression, or the first character of a sub-expression. + </p> +<p> + A '$' character shall match the end of a line when used as the last character + of an expression, or the last character of a sub-expression. + </p> +<h5> +<a name="boost_regex.syntax.basic_syntax.h4"></a> + <span><a name="boost_regex.syntax.basic_syntax.marked_sub_expressions_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.marked_sub_expressions_">Marked + sub-expressions:</a> + </h5> +<p> + A section beginning <code class="computeroutput"><span class="special">\(</span></code> and ending + <code class="computeroutput"><span class="special">\)</span></code> acts as a marked sub-expression. + Whatever matched the sub-expression is split out in a separate field by the + matching algorithms. Marked sub-expressions can also repeated, or referred-to + by a back-reference. + </p> +<h5> +<a name="boost_regex.syntax.basic_syntax.h5"></a> + <span><a name="boost_regex.syntax.basic_syntax.repeats_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.repeats_">Repeats:</a> + </h5> +<p> + Any atom (a single character, a marked sub-expression, or a character class) + can be repeated with the * operator. + </p> +<p> + For example <code class="computeroutput"><span class="identifier">a</span><span class="special">*</span></code> + will match any number of letter a's repeated zero or more times (an atom + repeated zero times matches an empty string), so the expression <code class="computeroutput"><span class="identifier">a</span><span class="special">*</span><span class="identifier">b</span></code> + will match any of the following: + </p> +<pre class="programlisting">b +ab +aaaaaaaab +</pre> +<p> + An atom can also be repeated with a bounded repeat: + </p> +<p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">\{</span><span class="identifier">n</span><span class="special">\}</span></code> Matches + 'a' repeated exactly n times. + </p> +<p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">\{</span><span class="identifier">n</span><span class="special">,\}</span></code> Matches + 'a' repeated n or more times. + </p> +<p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">\{</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">m</span><span class="special">\}</span></code> Matches 'a' repeated between n and m times + inclusive. + </p> +<p> + For example: + </p> +<pre class="programlisting">^a{2,3}$</pre> +<p> + Will match either of: + </p> +<pre class="programlisting">aa +aaa +</pre> +<p> + But neither of: + </p> +<pre class="programlisting">a +aaaa +</pre> +<p> + It is an error to use a repeat operator, if the preceding construct can not + be repeated, for example: + </p> +<pre class="programlisting">a(*)</pre> +<p> + Will raise an error, as there is nothing for the * operator to be applied + to. + </p> +<h5> +<a name="boost_regex.syntax.basic_syntax.h6"></a> + <span><a name="boost_regex.syntax.basic_syntax.back_references_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.back_references_">Back + references:</a> + </h5> +<p> + An escape character followed by a digit <span class="emphasis"><em>n</em></span>, where <span class="emphasis"><em>n</em></span> + is in the range 1-9, matches the same string that was matched by sub-expression + <span class="emphasis"><em>n</em></span>. For example the expression: + </p> +<pre class="programlisting">^\(a*\).*\1$</pre> +<p> + Will match the string: + </p> +<pre class="programlisting">aaabbaaa</pre> +<p> + But not the string: + </p> +<pre class="programlisting">aaabba</pre> +<h5> +<a name="boost_regex.syntax.basic_syntax.h7"></a> + <span><a name="boost_regex.syntax.basic_syntax.character_sets_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_sets_">Character + sets:</a> + </h5> +<p> + A character set is a bracket-expression starting with [ and ending with ], + it defines a set of characters, and matches any single character that is + a member of that set. + </p> +<p> + A bracket expression may contain any combination of the following: + </p> +<h6> +<a name="boost_regex.syntax.basic_syntax.h8"></a> + <span><a name="boost_regex.syntax.basic_syntax.single_characters_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.single_characters_">Single + characters:</a> + </h6> +<p> + For example <code class="computeroutput"><span class="special">[</span><span class="identifier">abc</span><span class="special">]</span></code>, will match any of the characters 'a', 'b', + or 'c'. + </p> +<h6> +<a name="boost_regex.syntax.basic_syntax.h9"></a> + <span><a name="boost_regex.syntax.basic_syntax.character_ranges_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_ranges_">Character + ranges:</a> + </h6> +<p> + For example <code class="computeroutput"><span class="special">[</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">]</span></code> + will match any single character in the range 'a' to 'c'. By default, for + POSIX-Basic regular expressions, a character <span class="emphasis"><em>x</em></span> is within + the range <span class="emphasis"><em>y</em></span> to <span class="emphasis"><em>z</em></span>, if it collates + within that range; this results in locale specific behavior. This behavior + can be turned off by unsetting the <code class="computeroutput"><span class="identifier">collate</span></code> + option flag when constructing the regular expression - in which case whether + a character appears within a range is determined by comparing the code points + of the characters only. + </p> +<h6> +<a name="boost_regex.syntax.basic_syntax.h10"></a> + <span><a name="boost_regex.syntax.basic_syntax.negation_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.negation_">Negation:</a> + </h6> +<p> + If the bracket-expression begins with the ^ character, then it matches the + complement of the characters it contains, for example <code class="computeroutput"><span class="special">[^</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">]</span></code> matches any character that is not in the + range a-c. + </p> +<h6> +<a name="boost_regex.syntax.basic_syntax.h11"></a> + <span><a name="boost_regex.syntax.basic_syntax.character_classes_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_classes_">Character + classes:</a> + </h6> +<p> + An expression of the form <code class="computeroutput"><span class="special">[[:</span><span class="identifier">name</span><span class="special">:]]</span></code> + matches the named character class "name", for example <code class="computeroutput"><span class="special">[[:</span><span class="identifier">lower</span><span class="special">:]]</span></code> matches any lower case character. See + <a class="link" href="character_classes.html" title="Character Class Names">character class names</a>. + </p> +<h6> +<a name="boost_regex.syntax.basic_syntax.h12"></a> + <span><a name="boost_regex.syntax.basic_syntax.collating_elements_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.collating_elements_">Collating + Elements:</a> + </h6> +<p> + An expression of the form <code class="computeroutput"><span class="special">[[.</span><span class="identifier">col</span><span class="special">.]</span></code> matches + the collating element <span class="emphasis"><em>col</em></span>. A collating element is any + single character, or any sequence of characters that collates as a single + unit. Collating elements may also be used as the end point of a range, for + example: <code class="computeroutput"><span class="special">[[.</span><span class="identifier">ae</span><span class="special">.]-</span><span class="identifier">c</span><span class="special">]</span></code> + matches the character sequence "ae", plus any single character + in the rangle "ae"-c, assuming that "ae" is treated as + a single collating element in the current locale. + </p> +<p> + Collating elements may be used in place of escapes (which are not normally + allowed inside character sets), for example <code class="computeroutput"><span class="special">[[.^.]</span><span class="identifier">abc</span><span class="special">]</span></code> would + match either one of the characters 'abc^'. + </p> +<p> + As an extension, a collating element may also be specified via its symbolic + name, for example: + </p> +<pre class="programlisting">[[.NUL.]]</pre> +<p> + matches a 'NUL' character. See <a class="link" href="collating_names.html" title="Collating Names">collating + element names</a>. + </p> +<h6> +<a name="boost_regex.syntax.basic_syntax.h13"></a> + <span><a name="boost_regex.syntax.basic_syntax.equivalence_classes_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.equivalence_classes_">Equivalence + classes:</a> + </h6> +<p> + An expression of theform <code class="computeroutput"><span class="special">[[=</span><span class="identifier">col</span><span class="special">=]]</span></code>, + matches any character or collating element whose primary sort key is the + same as that for collating element <span class="emphasis"><em>col</em></span>, as with collating + elements the name <span class="emphasis"><em>col</em></span> may be a <a class="link" href="collating_names.html" title="Collating Names">collating + symbolic name</a>. A primary sort key is one that ignores case, accentation, + or locale-specific tailorings; so for example <code class="computeroutput"><span class="special">[[=</span><span class="identifier">a</span><span class="special">=]]</span></code> matches + any of the characters: a, À, Á, Â, Ã, Ä, Å, A, à, á, â, ã, ä and å. Unfortunately implementation + of this is reliant on the platform's collation and localisation support; + this feature can not be relied upon to work portably across all platforms, + or even all locales on one platform. + </p> +<h6> +<a name="boost_regex.syntax.basic_syntax.h14"></a> + <span><a name="boost_regex.syntax.basic_syntax.combinations_"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.combinations_">Combinations:</a> + </h6> +<p> + All of the above can be combined in one character set declaration, for example: + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">[.</span><span class="identifier">NUL</span><span class="special">.]].</span></code> + </p> +<h5> +<a name="boost_regex.syntax.basic_syntax.h15"></a> + <span><a name="boost_regex.syntax.basic_syntax.escapes"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.escapes">Escapes</a> + </h5> +<p> + With the exception of the escape sequences \{, \}, \(, and \), which are + documented above, an escape followed by any character matches that character. + This can be used to make the special characters + </p> +<pre class="programlisting">.[\*^$</pre> +<p> + "ordinary". Note that the escape character loses its special meaning + inside a character set, so <code class="computeroutput"><span class="special">[\^]</span></code> + will match either a literal '\' or a '^'. + </p> +<h4> +<a name="boost_regex.syntax.basic_syntax.h16"></a> + <span><a name="boost_regex.syntax.basic_syntax.what_gets_matched"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.what_gets_matched">What + Gets Matched</a> + </h4> +<p> + When there is more that one way to match a regular expression, the "best" + possible match is obtained using the <a class="link" href="leftmost_longest_rule.html" title="The Leftmost Longest Rule">leftmost-longest + rule</a>. + </p> +<h4> +<a name="boost_regex.syntax.basic_syntax.h17"></a> + <span><a name="boost_regex.syntax.basic_syntax.variations"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.variations">Variations</a> + </h4> +<a name="boost_regex.grep_syntax"></a><h5> +<a name="boost_regex.syntax.basic_syntax.h18"></a> + <span><a name="boost_regex.syntax.basic_syntax.grep"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.grep">Grep</a> + </h5> +<p> + When an expression is compiled with the flag <code class="computeroutput"><span class="identifier">grep</span></code> + set, then the expression is treated as a newline separated list of <a class="link" href="basic_syntax.html#boost_regex.posix_basic">POSIX-Basic expressions</a>, a match + is found if any of the expressions in the list match, for example: + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e</span><span class="special">(</span><span class="string">"abc\ndef"</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">grep</span><span class="special">);</span> +</pre> +<p> + will match either of the <a class="link" href="basic_syntax.html#boost_regex.posix_basic">POSIX-Basic + expressions</a> "abc" or "def". + </p> +<p> + As its name suggests, this behavior is consistent with the Unix utility grep. + </p> +<h5> +<a name="boost_regex.syntax.basic_syntax.h19"></a> + <span><a name="boost_regex.syntax.basic_syntax.emacs"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.emacs">emacs</a> + </h5> +<p> + In addition to the <a class="link" href="basic_syntax.html#boost_regex.posix_basic">POSIX-Basic features</a> + the following characters are also special: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Character + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + + + </p> + </td> +<td> + <p> + repeats the preceding atom one or more times. + </p> + </td> +</tr> +<tr> +<td> + <p> + ? + </p> + </td> +<td> + <p> + repeats the preceding atom zero or one times. + </p> + </td> +</tr> +<tr> +<td> + <p> + *? + </p> + </td> +<td> + <p> + A non-greedy version of *. + </p> + </td> +</tr> +<tr> +<td> + <p> + +? + </p> + </td> +<td> + <p> + A non-greedy version of +. + </p> + </td> +</tr> +<tr> +<td> + <p> + ?? + </p> + </td> +<td> + <p> + A non-greedy version of ?. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + And the following escape sequences are also recognised: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + \| + </p> + </td> +<td> + <p> + specifies an alternative. + </p> + </td> +</tr> +<tr> +<td> + <p> + \(?: ... ) + </p> + </td> +<td> + <p> + is a non-marking grouping construct - allows you to lexically group + something without spitting out an extra sub-expression. + </p> + </td> +</tr> +<tr> +<td> + <p> + \w + </p> + </td> +<td> + <p> + matches any word character. + </p> + </td> +</tr> +<tr> +<td> + <p> + \W + </p> + </td> +<td> + <p> + matches any non-word character. + </p> + </td> +</tr> +<tr> +<td> + <p> + \sx + </p> + </td> +<td> + <p> + matches any character in the syntax group x, the following emacs + groupings are supported: 's', ' ', '_', 'w', '.', ')', '(', '"', + '\'', '>' and '<'. Refer to the emacs docs for details. + </p> + </td> +</tr> +<tr> +<td> + <p> + \Sx + </p> + </td> +<td> + <p> + matches any character not in the syntax grouping x. + </p> + </td> +</tr> +<tr> +<td> + <p> + \c and \C + </p> + </td> +<td> + <p> + These are not supported. + </p> + </td> +</tr> +<tr> +<td> + <p> + \` + </p> + </td> +<td> + <p> + matches zero characters only at the start of a buffer (or string + being matched). + </p> + </td> +</tr> +<tr> +<td> + <p> + \' + </p> + </td> +<td> + <p> + matches zero characters only at the end of a buffer (or string + being matched). + </p> + </td> +</tr> +<tr> +<td> + <p> + \b + </p> + </td> +<td> + <p> + matches zero characters at a word boundary. + </p> + </td> +</tr> +<tr> +<td> + <p> + \B + </p> + </td> +<td> + <p> + matches zero characters, not at a word boundary. + </p> + </td> +</tr> +<tr> +<td> + <p> + \< + </p> + </td> +<td> + <p> + matches zero characters only at the start of a word. + </p> + </td> +</tr> +<tr> +<td> + <p> + \> + </p> + </td> +<td> + <p> + matches zero characters only at the end of a word. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Finally, you should note that emacs style regular expressions are matched + according to the <a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.what_gets_matched">Perl + "depth first search" rules</a>. Emacs expressions are matched + this way because they contain Perl-like extensions, that do not interact + well with the <a class="link" href="leftmost_longest_rule.html" title="The Leftmost Longest Rule">POSIX-style + leftmost-longest rule</a>. + </p> +<h4> +<a name="boost_regex.syntax.basic_syntax.h20"></a> + <span><a name="boost_regex.syntax.basic_syntax.options"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.options">Options</a> + </h4> +<p> + There are a <a class="link" href="../ref/syntax_option_type/syntax_option_type_basic.html" title="Options for POSIX Basic Regular Expressions">variety + of flags</a> that may be combined with the <code class="computeroutput"><span class="identifier">basic</span></code> + and <code class="computeroutput"><span class="identifier">grep</span></code> options when constructing + the regular expression, in particular note that the <a class="link" href="../ref/syntax_option_type/syntax_option_type_basic.html" title="Options for POSIX Basic Regular Expressions"><code class="computeroutput"><span class="identifier">newline_alt</span></code>, <code class="computeroutput"><span class="identifier">no_char_classes</span></code>, + <code class="computeroutput"><span class="identifier">no</span><span class="special">-</span><span class="identifier">intervals</span></code>, <code class="computeroutput"><span class="identifier">bk_plus_qm</span></code> + and <code class="computeroutput"><span class="identifier">bk_plus_vbar</span></code></a> options + all alter the syntax, while the <a class="link" href="../ref/syntax_option_type/syntax_option_type_basic.html" title="Options for POSIX Basic Regular Expressions"><code class="computeroutput"><span class="identifier">collate</span></code> and <code class="computeroutput"><span class="identifier">icase</span></code> + options</a> modify how the case and locale sensitivity are to be applied. + </p> +<h4> +<a name="boost_regex.syntax.basic_syntax.h21"></a> + <span><a name="boost_regex.syntax.basic_syntax.references"></a></span><a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.references">References</a> + </h4> +<p> + <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap09.html" target="_top">IEEE + Std 1003.1-2001, Portable Operating System Interface (POSIX ), Base Definitions + and Headers, Section 9, Regular Expressions (FWD.1).</a> + </p> +<p> + <a href="http://www.opengroup.org/onlinepubs/000095399/utilities/grep.html" target="_top">IEEE + Std 1003.1-2001, Portable Operating System Interface (POSIX ), Shells and + Utilities, Section 4, Utilities, grep (FWD.1).</a> + </p> +<p> + <a href="http://www.gnu.org/software/emacs/" target="_top">Emacs Version 21.3.</a> + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="basic_extended.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="character_classes.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/character_classes.html b/libs/regex/doc/html/boost_regex/syntax/character_classes.html new file mode 100644 index 0000000000..b0ed57b7e0 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/character_classes.html @@ -0,0 +1,50 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Character Class Names</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax.html" title="Regular Expression Syntax"> +<link rel="prev" href="basic_syntax.html" title="POSIX Basic Regular Expression Syntax"> +<link rel="next" href="character_classes/std_char_clases.html" title="Character Classes that are Always Supported"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="basic_syntax.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="character_classes/std_char_clases.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.syntax.character_classes"></a><a class="link" href="character_classes.html" title="Character Class Names">Character Class + Names</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="character_classes/std_char_clases.html">Character + Classes that are Always Supported</a></span></dt> +<dt><span class="section"><a href="character_classes/optional_char_class_names.html">Character + classes that are supported by Unicode Regular Expressions</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="basic_syntax.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="character_classes/std_char_clases.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/character_classes/optional_char_class_names.html b/libs/regex/doc/html/boost_regex/syntax/character_classes/optional_char_class_names.html new file mode 100644 index 0000000000..524e137734 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/character_classes/optional_char_class_names.html @@ -0,0 +1,541 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Character classes that are supported by Unicode Regular Expressions</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../character_classes.html" title="Character Class Names"> +<link rel="prev" href="std_char_clases.html" title="Character Classes that are Always Supported"> +<link rel="next" href="../collating_names.html" title="Collating Names"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="std_char_clases.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../character_classes.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../collating_names.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.syntax.character_classes.optional_char_class_names"></a><a class="link" href="optional_char_class_names.html" title="Character classes that are supported by Unicode Regular Expressions">Character + classes that are supported by Unicode Regular Expressions</a> +</h4></div></div></div> +<p> + The following character classes are only supported by Unicode Regular Expressions: + that is those that use the <code class="computeroutput"><span class="identifier">u32regex</span></code> + type. The names used are the same as those from Chapter 4 of the Unicode + standard. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Short Name + </p> + </th> +<th> + <p> + Long Name + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + </td> +<td> + <p> + ASCII + </p> + </td> +</tr> +<tr> +<td> + </td> +<td> + <p> + Any + </p> + </td> +</tr> +<tr> +<td> + </td> +<td> + <p> + Assigned + </p> + </td> +</tr> +<tr> +<td> + <p> + C* + </p> + </td> +<td> + <p> + Other + </p> + </td> +</tr> +<tr> +<td> + <p> + Cc + </p> + </td> +<td> + <p> + Control + </p> + </td> +</tr> +<tr> +<td> + <p> + Cf + </p> + </td> +<td> + <p> + Format + </p> + </td> +</tr> +<tr> +<td> + <p> + Cn + </p> + </td> +<td> + <p> + Not Assigned + </p> + </td> +</tr> +<tr> +<td> + <p> + Co + </p> + </td> +<td> + <p> + Private Use + </p> + </td> +</tr> +<tr> +<td> + <p> + Cs + </p> + </td> +<td> + <p> + Surrogate + </p> + </td> +</tr> +<tr> +<td> + <p> + L* + </p> + </td> +<td> + <p> + Letter + </p> + </td> +</tr> +<tr> +<td> + <p> + Ll + </p> + </td> +<td> + <p> + Lowercase Letter + </p> + </td> +</tr> +<tr> +<td> + <p> + Lm + </p> + </td> +<td> + <p> + Modifier Letter + </p> + </td> +</tr> +<tr> +<td> + <p> + Lo + </p> + </td> +<td> + <p> + Other Letter + </p> + </td> +</tr> +<tr> +<td> + <p> + Lt + </p> + </td> +<td> + <p> + Titlecase + </p> + </td> +</tr> +<tr> +<td> + <p> + Lu + </p> + </td> +<td> + <p> + Uppercase Letter + </p> + </td> +</tr> +<tr> +<td> + <p> + M* + </p> + </td> +<td> + <p> + Mark + </p> + </td> +</tr> +<tr> +<td> + <p> + Mc + </p> + </td> +<td> + <p> + Spacing Combining Mark + </p> + </td> +</tr> +<tr> +<td> + <p> + Me + </p> + </td> +<td> + <p> + Enclosing Mark + </p> + </td> +</tr> +<tr> +<td> + <p> + Mn + </p> + </td> +<td> + <p> + Non-Spacing Mark + </p> + </td> +</tr> +<tr> +<td> + <p> + N* + </p> + </td> +<td> + <p> + Number + </p> + </td> +</tr> +<tr> +<td> + <p> + Nd + </p> + </td> +<td> + <p> + Decimal Digit Number + </p> + </td> +</tr> +<tr> +<td> + <p> + Nl + </p> + </td> +<td> + <p> + Letter Number + </p> + </td> +</tr> +<tr> +<td> + <p> + No + </p> + </td> +<td> + <p> + Other Number + </p> + </td> +</tr> +<tr> +<td> + <p> + P* + </p> + </td> +<td> + <p> + Punctuation + </p> + </td> +</tr> +<tr> +<td> + <p> + Pc + </p> + </td> +<td> + <p> + Connector Punctuation + </p> + </td> +</tr> +<tr> +<td> + <p> + Pd + </p> + </td> +<td> + <p> + Dash Punctuation + </p> + </td> +</tr> +<tr> +<td> + <p> + Pe + </p> + </td> +<td> + <p> + Close Punctuation + </p> + </td> +</tr> +<tr> +<td> + <p> + Pf + </p> + </td> +<td> + <p> + Final Punctuation + </p> + </td> +</tr> +<tr> +<td> + <p> + Pi + </p> + </td> +<td> + <p> + Initial Punctuation + </p> + </td> +</tr> +<tr> +<td> + <p> + Po + </p> + </td> +<td> + <p> + Other Punctuation + </p> + </td> +</tr> +<tr> +<td> + <p> + Ps + </p> + </td> +<td> + <p> + Open Punctuation + </p> + </td> +</tr> +<tr> +<td> + <p> + S* + </p> + </td> +<td> + <p> + Symbol + </p> + </td> +</tr> +<tr> +<td> + <p> + Sc + </p> + </td> +<td> + <p> + Currency Symbol + </p> + </td> +</tr> +<tr> +<td> + <p> + Sk + </p> + </td> +<td> + <p> + Modifier Symbol + </p> + </td> +</tr> +<tr> +<td> + <p> + Sm + </p> + </td> +<td> + <p> + Math Symbol + </p> + </td> +</tr> +<tr> +<td> + <p> + So + </p> + </td> +<td> + <p> + Other Symbol + </p> + </td> +</tr> +<tr> +<td> + <p> + Z* + </p> + </td> +<td> + <p> + Separator + </p> + </td> +</tr> +<tr> +<td> + <p> + Zl + </p> + </td> +<td> + <p> + Line Separator + </p> + </td> +</tr> +<tr> +<td> + <p> + Zp + </p> + </td> +<td> + <p> + Paragraph Separator + </p> + </td> +</tr> +<tr> +<td> + <p> + Zs + </p> + </td> +<td> + <p> + Space Separator + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="std_char_clases.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../character_classes.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../collating_names.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/character_classes/std_char_clases.html b/libs/regex/doc/html/boost_regex/syntax/character_classes/std_char_clases.html new file mode 100644 index 0000000000..f2eac34a3e --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/character_classes/std_char_clases.html @@ -0,0 +1,396 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Character Classes that are Always Supported</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../character_classes.html" title="Character Class Names"> +<link rel="prev" href="../character_classes.html" title="Character Class Names"> +<link rel="next" href="optional_char_class_names.html" title="Character classes that are supported by Unicode Regular Expressions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../character_classes.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../character_classes.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="optional_char_class_names.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.syntax.character_classes.std_char_clases"></a><a class="link" href="std_char_clases.html" title="Character Classes that are Always Supported">Character + Classes that are Always Supported</a> +</h4></div></div></div> +<p> + The following character class names are always supported by Boost.Regex: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Name + </p> + </th> +<th> + <p> + POSIX-standard name + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + alnum + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any alpha-numeric character. + </p> + </td> +</tr> +<tr> +<td> + <p> + alpha + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any alphabetic character. + </p> + </td> +</tr> +<tr> +<td> + <p> + blank + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any whitespace character that is not a line separator. + </p> + </td> +</tr> +<tr> +<td> + <p> + cntrl + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any control character. + </p> + </td> +</tr> +<tr> +<td> + <p> + d + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Any decimal digit + </p> + </td> +</tr> +<tr> +<td> + <p> + digit + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any decimal digit. + </p> + </td> +</tr> +<tr> +<td> + <p> + graph + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any graphical character. + </p> + </td> +</tr> +<tr> +<td> + <p> + l + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Any lower case character. + </p> + </td> +</tr> +<tr> +<td> + <p> + lower + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any lower case character. + </p> + </td> +</tr> +<tr> +<td> + <p> + print + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any printable character. + </p> + </td> +</tr> +<tr> +<td> + <p> + punct + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any punctuation character. + </p> + </td> +</tr> +<tr> +<td> + <p> + s + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Any whitespace character. + </p> + </td> +</tr> +<tr> +<td> + <p> + space + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any whitespace character. + </p> + </td> +</tr> +<tr> +<td> + <p> + unicode + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Any extended character whose code point is above 255 in value. + </p> + </td> +</tr> +<tr> +<td> + <p> + u + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Any upper case character. + </p> + </td> +</tr> +<tr> +<td> + <p> + upper + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any upper case character. + </p> + </td> +</tr> +<tr> +<td> + <p> + w + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Any word character (alphanumeric characters plus the underscore). + </p> + </td> +</tr> +<tr> +<td> + <p> + word + </p> + </td> +<td> + <p> + No + </p> + </td> +<td> + <p> + Any word character (alphanumeric characters plus the underscore). + </p> + </td> +</tr> +<tr> +<td> + <p> + xdigit + </p> + </td> +<td> + <p> + Yes + </p> + </td> +<td> + <p> + Any hexadecimal digit character. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../character_classes.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../character_classes.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="optional_char_class_names.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/collating_names.html b/libs/regex/doc/html/boost_regex/syntax/collating_names.html new file mode 100644 index 0000000000..c06633ff28 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/collating_names.html @@ -0,0 +1,50 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Collating Names</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax.html" title="Regular Expression Syntax"> +<link rel="prev" href="character_classes/optional_char_class_names.html" title="Character classes that are supported by Unicode Regular Expressions"> +<link rel="next" href="collating_names/digraphs.html" title="Digraphs"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="character_classes/optional_char_class_names.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="collating_names/digraphs.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.syntax.collating_names"></a><a class="link" href="collating_names.html" title="Collating Names">Collating Names</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="collating_names/digraphs.html">Digraphs</a></span></dt> +<dt><span class="section"><a href="collating_names/posix_symbolic_names.html">POSIX + Symbolic Names</a></span></dt> +<dt><span class="section"><a href="collating_names/named_unicode.html">Named + Unicode Characters</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="character_classes/optional_char_class_names.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="collating_names/digraphs.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/collating_names/digraphs.html b/libs/regex/doc/html/boost_regex/syntax/collating_names/digraphs.html new file mode 100644 index 0000000000..aa482eef48 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/collating_names/digraphs.html @@ -0,0 +1,61 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Digraphs</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../collating_names.html" title="Collating Names"> +<link rel="prev" href="../collating_names.html" title="Collating Names"> +<link rel="next" href="posix_symbolic_names.html" title="POSIX Symbolic Names"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../collating_names.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../collating_names.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="posix_symbolic_names.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.syntax.collating_names.digraphs"></a><a class="link" href="digraphs.html" title="Digraphs">Digraphs</a> +</h4></div></div></div> +<p> + The following are treated as valid digraphs when used as a collating name: + </p> +<p> + "ae", "Ae", "AE", "ch", "Ch", + "CH", "ll", "Ll", "LL", "ss", + "Ss", "SS", "nj", "Nj", "NJ", + "dz", "Dz", "DZ", "lj", "Lj", + "LJ". + </p> +<p> + So for example the expression: + </p> +<pre class="programlisting">[[.ae.]-c] </pre> +<p> + will match any character that collates between the digraph "ae" + and the character "c". + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../collating_names.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../collating_names.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="posix_symbolic_names.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/collating_names/named_unicode.html b/libs/regex/doc/html/boost_regex/syntax/collating_names/named_unicode.html new file mode 100644 index 0000000000..013151b3c2 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/collating_names/named_unicode.html @@ -0,0 +1,54 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Named Unicode Characters</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../collating_names.html" title="Collating Names"> +<link rel="prev" href="posix_symbolic_names.html" title="POSIX Symbolic Names"> +<link rel="next" href="../leftmost_longest_rule.html" title="The Leftmost Longest Rule"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="posix_symbolic_names.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../collating_names.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../leftmost_longest_rule.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.syntax.collating_names.named_unicode"></a><a class="link" href="named_unicode.html" title="Named Unicode Characters">Named + Unicode Characters</a> +</h4></div></div></div> +<p> + When using <a class="link" href="../../unicode.html" title="Unicode and Boost.Regex">Unicode aware regular expressions</a> + (with the <code class="computeroutput"><span class="identifier">u32regex</span></code> type), + all the normal symbolic names for Unicode characters (those given in Unidata.txt) + are recognised. So for example: + </p> +<pre class="programlisting">[[.CYRILLIC CAPITAL LETTER I.]] </pre> +<p> + would match the Unicode character 0x0418. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="posix_symbolic_names.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../collating_names.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../leftmost_longest_rule.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/collating_names/posix_symbolic_names.html b/libs/regex/doc/html/boost_regex/syntax/collating_names/posix_symbolic_names.html new file mode 100644 index 0000000000..129fbf77fa --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/collating_names/posix_symbolic_names.html @@ -0,0 +1,985 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>POSIX Symbolic Names</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Boost.Regex"> +<link rel="up" href="../collating_names.html" title="Collating Names"> +<link rel="prev" href="digraphs.html" title="Digraphs"> +<link rel="next" href="named_unicode.html" title="Named Unicode Characters"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="digraphs.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../collating_names.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="named_unicode.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_regex.syntax.collating_names.posix_symbolic_names"></a><a class="link" href="posix_symbolic_names.html" title="POSIX Symbolic Names">POSIX + Symbolic Names</a> +</h4></div></div></div> +<p> + The following symbolic names are recognised as valid collating element + names, in addition to any single character, this allows you to write for + example: + </p> +<pre class="programlisting">[[.left-square-bracket.][.right-square-bracket.]]</pre> +<p> + if you wanted to match either "[" or "]". + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Name + </p> + </th> +<th> + <p> + Character + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + NUL + </p> + </td> +<td> + <p> + \x00 + </p> + </td> +</tr> +<tr> +<td> + <p> + SOH + </p> + </td> +<td> + <p> + \x01 + </p> + </td> +</tr> +<tr> +<td> + <p> + STX + </p> + </td> +<td> + <p> + \x02 + </p> + </td> +</tr> +<tr> +<td> + <p> + ETX + </p> + </td> +<td> + <p> + \x03 + </p> + </td> +</tr> +<tr> +<td> + <p> + EOT + </p> + </td> +<td> + <p> + \x04 + </p> + </td> +</tr> +<tr> +<td> + <p> + ENQ + </p> + </td> +<td> + <p> + \x05 + </p> + </td> +</tr> +<tr> +<td> + <p> + ACK + </p> + </td> +<td> + <p> + \x06 + </p> + </td> +</tr> +<tr> +<td> + <p> + alert + </p> + </td> +<td> + <p> + \x07 + </p> + </td> +</tr> +<tr> +<td> + <p> + backspace + </p> + </td> +<td> + <p> + \x08 + </p> + </td> +</tr> +<tr> +<td> + <p> + tab + </p> + </td> +<td> + <p> + \t + </p> + </td> +</tr> +<tr> +<td> + <p> + newline + </p> + </td> +<td> + <p> + \n + </p> + </td> +</tr> +<tr> +<td> + <p> + vertical-tab + </p> + </td> +<td> + <p> + \v + </p> + </td> +</tr> +<tr> +<td> + <p> + form-feed + </p> + </td> +<td> + <p> + \f + </p> + </td> +</tr> +<tr> +<td> + <p> + carriage-return + </p> + </td> +<td> + <p> + \r + </p> + </td> +</tr> +<tr> +<td> + <p> + SO + </p> + </td> +<td> + <p> + \xE + </p> + </td> +</tr> +<tr> +<td> + <p> + SI + </p> + </td> +<td> + <p> + \xF + </p> + </td> +</tr> +<tr> +<td> + <p> + DLE + </p> + </td> +<td> + <p> + \x10 + </p> + </td> +</tr> +<tr> +<td> + <p> + DC1 + </p> + </td> +<td> + <p> + \x11 + </p> + </td> +</tr> +<tr> +<td> + <p> + DC2 + </p> + </td> +<td> + <p> + \x12 + </p> + </td> +</tr> +<tr> +<td> + <p> + DC3 + </p> + </td> +<td> + <p> + \x13 + </p> + </td> +</tr> +<tr> +<td> + <p> + DC4 + </p> + </td> +<td> + <p> + \x14 + </p> + </td> +</tr> +<tr> +<td> + <p> + NAK + </p> + </td> +<td> + <p> + \x15 + </p> + </td> +</tr> +<tr> +<td> + <p> + SYN + </p> + </td> +<td> + <p> + \x16 + </p> + </td> +</tr> +<tr> +<td> + <p> + ETB + </p> + </td> +<td> + <p> + \x17 + </p> + </td> +</tr> +<tr> +<td> + <p> + CAN + </p> + </td> +<td> + <p> + \x18 + </p> + </td> +</tr> +<tr> +<td> + <p> + EM + </p> + </td> +<td> + <p> + \x19 + </p> + </td> +</tr> +<tr> +<td> + <p> + SUB + </p> + </td> +<td> + <p> + \x1A + </p> + </td> +</tr> +<tr> +<td> + <p> + ESC + </p> + </td> +<td> + <p> + \x1B + </p> + </td> +</tr> +<tr> +<td> + <p> + IS4 + </p> + </td> +<td> + <p> + \x1C + </p> + </td> +</tr> +<tr> +<td> + <p> + IS3 + </p> + </td> +<td> + <p> + \x1D + </p> + </td> +</tr> +<tr> +<td> + <p> + IS2 + </p> + </td> +<td> + <p> + \x1E + </p> + </td> +</tr> +<tr> +<td> + <p> + IS1 + </p> + </td> +<td> + <p> + \x1F + </p> + </td> +</tr> +<tr> +<td> + <p> + space + </p> + </td> +<td> + <p> + \x20 + </p> + </td> +</tr> +<tr> +<td> + <p> + exclamation-mark + </p> + </td> +<td> + <p> + ! + </p> + </td> +</tr> +<tr> +<td> + <p> + quotation-mark + </p> + </td> +<td> + <p> + " + </p> + </td> +</tr> +<tr> +<td> + <p> + number-sign + </p> + </td> +<td> + <p> + # + </p> + </td> +</tr> +<tr> +<td> + <p> + dollar-sign + </p> + </td> +<td> + <p> + $ + </p> + </td> +</tr> +<tr> +<td> + <p> + percent-sign + </p> + </td> +<td> + <p> + % + </p> + </td> +</tr> +<tr> +<td> + <p> + ampersand + </p> + </td> +<td> + <p> + & + </p> + </td> +</tr> +<tr> +<td> + <p> + apostrophe + </p> + </td> +<td> + <p> + ' + </p> + </td> +</tr> +<tr> +<td> + <p> + left-parenthesis + </p> + </td> +<td> + <p> + ( + </p> + </td> +</tr> +<tr> +<td> + <p> + right-parenthesis + </p> + </td> +<td> + <p> + ) + </p> + </td> +</tr> +<tr> +<td> + <p> + asterisk + </p> + </td> +<td> + <p> + * + </p> + </td> +</tr> +<tr> +<td> + <p> + plus-sign + </p> + </td> +<td> + <p> + + + </p> + </td> +</tr> +<tr> +<td> + <p> + comma + </p> + </td> +<td> + <p> + , + </p> + </td> +</tr> +<tr> +<td> + <p> + hyphen + </p> + </td> +<td> + <p> + - + </p> + </td> +</tr> +<tr> +<td> + <p> + period + </p> + </td> +<td> + <p> + . + </p> + </td> +</tr> +<tr> +<td> + <p> + slash + </p> + </td> +<td> + <p> + / + </p> + </td> +</tr> +<tr> +<td> + <p> + zero + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + one + </p> + </td> +<td> + <p> + 1 + </p> + </td> +</tr> +<tr> +<td> + <p> + two + </p> + </td> +<td> + <p> + 2 + </p> + </td> +</tr> +<tr> +<td> + <p> + three + </p> + </td> +<td> + <p> + 3 + </p> + </td> +</tr> +<tr> +<td> + <p> + four + </p> + </td> +<td> + <p> + 4 + </p> + </td> +</tr> +<tr> +<td> + <p> + five + </p> + </td> +<td> + <p> + 5 + </p> + </td> +</tr> +<tr> +<td> + <p> + six + </p> + </td> +<td> + <p> + 6 + </p> + </td> +</tr> +<tr> +<td> + <p> + seven + </p> + </td> +<td> + <p> + 7 + </p> + </td> +</tr> +<tr> +<td> + <p> + eight + </p> + </td> +<td> + <p> + 8 + </p> + </td> +</tr> +<tr> +<td> + <p> + nine + </p> + </td> +<td> + <p> + 9 + </p> + </td> +</tr> +<tr> +<td> + <p> + colon + </p> + </td> +<td> + <p> + : + </p> + </td> +</tr> +<tr> +<td> + <p> + semicolon + </p> + </td> +<td> + <p> + ; + </p> + </td> +</tr> +<tr> +<td> + <p> + less-than-sign + </p> + </td> +<td> + <p> + < + </p> + </td> +</tr> +<tr> +<td> + <p> + equals-sign + </p> + </td> +<td> + <p> + = + </p> + </td> +</tr> +<tr> +<td> + <p> + greater-than-sign + </p> + </td> +<td> + <p> + > + </p> + </td> +</tr> +<tr> +<td> + <p> + question-mark + </p> + </td> +<td> + <p> + ? + </p> + </td> +</tr> +<tr> +<td> + <p> + commercial-at + </p> + </td> +<td> + <p> + @ + </p> + </td> +</tr> +<tr> +<td> + <p> + left-square-bracket + </p> + </td> +<td> + <p> + [ + </p> + </td> +</tr> +<tr> +<td> + <p> + backslash + </p> + </td> +<td> + <p> + \ + </p> + </td> +</tr> +<tr> +<td> + <p> + right-square-bracket + </p> + </td> +<td> + <p> + ] + </p> + </td> +</tr> +<tr> +<td> + <p> + circumflex + </p> + </td> +<td> + <p> + ~ + </p> + </td> +</tr> +<tr> +<td> + <p> + underscore + </p> + </td> +<td> + <p> + _ + </p> + </td> +</tr> +<tr> +<td> + <p> + grave-accent + </p> + </td> +<td> + <p> + ` + </p> + </td> +</tr> +<tr> +<td> + <p> + left-curly-bracket + </p> + </td> +<td> + <p> + { + </p> + </td> +</tr> +<tr> +<td> + <p> + vertical-line + </p> + </td> +<td> + <p> + | + </p> + </td> +</tr> +<tr> +<td> + <p> + right-curly-bracket + </p> + </td> +<td> + <p> + } + </p> + </td> +</tr> +<tr> +<td> + <p> + tilde + </p> + </td> +<td> + <p> + ~ + </p> + </td> +</tr> +<tr> +<td> + <p> + DEL + </p> + </td> +<td> + <p> + \x7F + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="digraphs.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../collating_names.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="named_unicode.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/leftmost_longest_rule.html b/libs/regex/doc/html/boost_regex/syntax/leftmost_longest_rule.html new file mode 100644 index 0000000000..a801237cf8 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/leftmost_longest_rule.html @@ -0,0 +1,79 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>The Leftmost Longest Rule</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax.html" title="Regular Expression Syntax"> +<link rel="prev" href="collating_names/named_unicode.html" title="Named Unicode Characters"> +<link rel="next" href="../format.html" title="Search and Replace Format String Syntax"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="collating_names/named_unicode.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../format.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.syntax.leftmost_longest_rule"></a><a class="link" href="leftmost_longest_rule.html" title="The Leftmost Longest Rule">The Leftmost + Longest Rule</a> +</h3></div></div></div> +<p> + Often there is more than one way of matching a regular expression at a particular + location, for POSIX basic and extended regular expressions, the "best" + match is determined as follows: + </p> +<div class="orderedlist"><ol class="orderedlist" type="1"> +<li class="listitem"> + Find the leftmost match, if there is only one match possible at this + location then return it. + </li> +<li class="listitem"> + Find the longest of the possible matches, along with any ties. If there + is only one such possible match then return it. + </li> +<li class="listitem"> + If there are no marked sub-expressions, then all the remaining alternatives + are indistinguishable; return the first of these found. + </li> +<li class="listitem"> + Find the match which has matched the first sub-expression in the leftmost + position, along with any ties. If there is only on such match possible + then return it. + </li> +<li class="listitem"> + Find the match which has the longest match for the first sub-expression, + along with any ties. If there is only one such match then return it. + </li> +<li class="listitem"> + Repeat steps 4 and 5 for each additional marked sub-expression. + </li> +<li class="listitem"> + If there is still more than one possible match remaining, then they are + indistinguishable; return the first one found. + </li> +</ol></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="collating_names/named_unicode.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../format.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html b/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html new file mode 100644 index 0000000000..2ba0eaf0bc --- /dev/null +++ b/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html @@ -0,0 +1,1598 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Perl Regular Expression Syntax</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Boost.Regex"> +<link rel="up" href="../syntax.html" title="Regular Expression Syntax"> +<link rel="prev" href="../syntax.html" title="Regular Expression Syntax"> +<link rel="next" href="basic_extended.html" title="POSIX Extended Regular Expression Syntax"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../syntax.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="basic_extended.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_regex.syntax.perl_syntax"></a><a class="link" href="perl_syntax.html" title="Perl Regular Expression Syntax">Perl Regular Expression + Syntax</a> +</h3></div></div></div> +<h4> +<a name="boost_regex.syntax.perl_syntax.h0"></a> + <span><a name="boost_regex.syntax.perl_syntax.synopsis"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.synopsis">Synopsis</a> + </h4> +<p> + The Perl regular expression syntax is based on that used by the programming + language Perl . Perl regular expressions are the default behavior in Boost.Regex + or you can pass the flag <code class="literal">perl</code> to the <a class="link" href="../ref/basic_regex.html" title="basic_regex"><code class="computeroutput"><span class="identifier">basic_regex</span></code></a> constructor, for example: + </p> +<pre class="programlisting"><span class="comment">// e1 is a case sensitive Perl regular expression: </span> +<span class="comment">// since Perl is the default option there's no need to explicitly specify the syntax used here:</span> +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e1</span><span class="special">(</span><span class="identifier">my_expression</span><span class="special">);</span> +<span class="comment">// e2 a case insensitive Perl regular expression:</span> +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e2</span><span class="special">(</span><span class="identifier">my_expression</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">perl</span><span class="special">|</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">icase</span><span class="special">);</span> +</pre> +<h4> +<a name="boost_regex.syntax.perl_syntax.h1"></a> + <span><a name="boost_regex.syntax.perl_syntax.perl_regular_expression_syntax"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.perl_regular_expression_syntax">Perl + Regular Expression Syntax</a> + </h4> +<p> + In Perl regular expressions, all characters match themselves except for the + following special characters: + </p> +<pre class="programlisting">.[{}()\*+?|^$</pre> +<h5> +<a name="boost_regex.syntax.perl_syntax.h2"></a> + <span><a name="boost_regex.syntax.perl_syntax.wildcard"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.wildcard">Wildcard</a> + </h5> +<p> + The single character '.' when used outside of a character set will match + any single character except: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + The NULL character when the <a class="link" href="../ref/match_flag_type.html" title="match_flag_type">flag + <code class="literal">match_not_dot_null</code></a> is passed to the matching + algorithms. + </li> +<li class="listitem"> + The newline character when the <a class="link" href="../ref/match_flag_type.html" title="match_flag_type">flag + <code class="literal">match_not_dot_newline</code></a> is passed to the matching + algorithms. + </li> +</ul></div> +<h5> +<a name="boost_regex.syntax.perl_syntax.h3"></a> + <span><a name="boost_regex.syntax.perl_syntax.anchors"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.anchors">Anchors</a> + </h5> +<p> + A '^' character shall match the start of a line. + </p> +<p> + A '$' character shall match the end of a line. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h4"></a> + <span><a name="boost_regex.syntax.perl_syntax.marked_sub_expressions"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.marked_sub_expressions">Marked sub-expressions</a> + </h5> +<p> + A section beginning <code class="literal">(</code> and ending <code class="literal">)</code> + acts as a marked sub-expression. Whatever matched the sub-expression is split + out in a separate field by the matching algorithms. Marked sub-expressions + can also repeated, or referred to by a back-reference. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h5"></a> + <span><a name="boost_regex.syntax.perl_syntax.non_marking_grouping"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_marking_grouping">Non-marking + grouping</a> + </h5> +<p> + A marked sub-expression is useful to lexically group part of a regular expression, + but has the side-effect of spitting out an extra field in the result. As + an alternative you can lexically group part of a regular expression, without + generating a marked sub-expression by using <code class="literal">(?:</code> and <code class="literal">)</code> + , for example <code class="literal">(?:ab)+</code> will repeat <code class="literal">ab</code> + without splitting out any separate sub-expressions. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h6"></a> + <span><a name="boost_regex.syntax.perl_syntax.repeats"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.repeats">Repeats</a> + </h5> +<p> + Any atom (a single character, a marked sub-expression, or a character class) + can be repeated with the <code class="literal">*</code>, <code class="literal">+</code>, <code class="literal">?</code>, + and <code class="literal">{}</code> operators. + </p> +<p> + The <code class="literal">*</code> operator will match the preceding atom zero or more + times, for example the expression <code class="literal">a*b</code> will match any of + the following: + </p> +<pre class="programlisting"><span class="identifier">b</span> +<span class="identifier">ab</span> +<span class="identifier">aaaaaaaab</span> +</pre> +<p> + The <code class="literal">+</code> operator will match the preceding atom one or more + times, for example the expression <code class="literal">a+b</code> will match any of + the following: + </p> +<pre class="programlisting"><span class="identifier">ab</span> +<span class="identifier">aaaaaaaab</span> +</pre> +<p> + But will not match: + </p> +<pre class="programlisting"><span class="identifier">b</span> +</pre> +<p> + The <code class="literal">?</code> operator will match the preceding atom zero or one + times, for example the expression ca?b will match any of the following: + </p> +<pre class="programlisting"><span class="identifier">cb</span> +<span class="identifier">cab</span> +</pre> +<p> + But will not match: + </p> +<pre class="programlisting"><span class="identifier">caab</span> +</pre> +<p> + An atom can also be repeated with a bounded repeat: + </p> +<p> + <code class="literal">a{n}</code> Matches 'a' repeated exactly n times. + </p> +<p> + <code class="literal">a{n,}</code> Matches 'a' repeated n or more times. + </p> +<p> + <code class="literal">a{n, m}</code> Matches 'a' repeated between n and m times inclusive. + </p> +<p> + For example: + </p> +<pre class="programlisting">^a{2,3}$</pre> +<p> + Will match either of: + </p> +<pre class="programlisting"><span class="identifier">aa</span> +<span class="identifier">aaa</span> +</pre> +<p> + But neither of: + </p> +<pre class="programlisting"><span class="identifier">a</span> +<span class="identifier">aaaa</span> +</pre> +<p> + It is an error to use a repeat operator, if the preceding construct can not + be repeated, for example: + </p> +<pre class="programlisting"><span class="identifier">a</span><span class="special">(*)</span> +</pre> +<p> + Will raise an error, as there is nothing for the <code class="literal">*</code> operator + to be applied to. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h7"></a> + <span><a name="boost_regex.syntax.perl_syntax.non_greedy_repeats"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_greedy_repeats">Non + greedy repeats</a> + </h5> +<p> + The normal repeat operators are "greedy", that is to say they will + consume as much input as possible. There are non-greedy versions available + that will consume as little input as possible while still producing a match. + </p> +<p> + <code class="literal">*?</code> Matches the previous atom zero or more times, while + consuming as little input as possible. + </p> +<p> + <code class="literal">+?</code> Matches the previous atom one or more times, while + consuming as little input as possible. + </p> +<p> + <code class="literal">??</code> Matches the previous atom zero or one times, while + consuming as little input as possible. + </p> +<p> + <code class="literal">{n,}?</code> Matches the previous atom n or more times, while + consuming as little input as possible. + </p> +<p> + <code class="literal">{n,m}?</code> Matches the previous atom between n and m times, + while consuming as little input as possible. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h8"></a> + <span><a name="boost_regex.syntax.perl_syntax.possessive_repeats"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.possessive_repeats">Possessive + repeats</a> + </h5> +<p> + By default when a repeated pattern does not match then the engine will backtrack + until a match is found. However, this behaviour can sometime be undesireable + so there are also "possessive" repeats: these match as much as + possible and do not then allow backtracking if the rest of the expression + fails to match. + </p> +<p> + <code class="literal">*+</code> Matches the previous atom zero or more times, while + giving nothing back. + </p> +<p> + <code class="literal">++</code> Matches the previous atom one or more times, while + giving nothing back. + </p> +<p> + <code class="literal">?+</code> Matches the previous atom zero or one times, while + giving nothing back. + </p> +<p> + <code class="literal">{n,}+</code> Matches the previous atom n or more times, while + giving nothing back. + </p> +<p> + <code class="literal">{n,m}+</code> Matches the previous atom between n and m times, + while giving nothing back. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h9"></a> + <span><a name="boost_regex.syntax.perl_syntax.back_references"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.back_references">Back + references</a> + </h5> +<p> + An escape character followed by a digit <span class="emphasis"><em>n</em></span>, where <span class="emphasis"><em>n</em></span> + is in the range 1-9, matches the same string that was matched by sub-expression + <span class="emphasis"><em>n</em></span>. For example the expression: + </p> +<pre class="programlisting">^(a*).*\1$</pre> +<p> + Will match the string: + </p> +<pre class="programlisting"><span class="identifier">aaabbaaa</span> +</pre> +<p> + But not the string: + </p> +<pre class="programlisting"><span class="identifier">aaabba</span> +</pre> +<p> + You can also use the \g escape for the same function, for example: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="literal">\g1</code> + </p> + </td> +<td> + <p> + Match whatever matched sub-expression 1 + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\g{1}</code> + </p> + </td> +<td> + <p> + Match whatever matched sub-expression 1: this form allows for safer + parsing of the expression in cases like <code class="literal">\g{1}2</code> + or for indexes higher than 9 as in <code class="literal">\g{1234}</code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\g-1</code> + </p> + </td> +<td> + <p> + Match whatever matched the last opened sub-expression + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\g{-2}</code> + </p> + </td> +<td> + <p> + Match whatever matched the last but one opened sub-expression + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\g{one}</code> + </p> + </td> +<td> + <p> + Match whatever matched the sub-expression named "one" + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Finally the \k escape can be used to refer to named subexpressions, for example + <code class="literal">\k<two></code> will match whatever matched the subexpression + named "two". + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h10"></a> + <span><a name="boost_regex.syntax.perl_syntax.alternation"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.alternation">Alternation</a> + </h5> +<p> + The <code class="literal">|</code> operator will match either of its arguments, so + for example: <code class="literal">abc|def</code> will match either "abc" + or "def". + </p> +<p> + Parenthesis can be used to group alternations, for example: <code class="literal">ab(d|ef)</code> + will match either of "abd" or "abef". + </p> +<p> + Empty alternatives are not allowed (these are almost always a mistake), but + if you really want an empty alternative use <code class="literal">(?:)</code> as a + placeholder, for example: + </p> +<p> + <code class="literal">|abc</code> is not a valid expression, but + </p> +<p> + <code class="literal">(?:)|abc</code> is and is equivalent, also the expression: + </p> +<p> + <code class="literal">(?:abc)??</code> has exactly the same effect. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h11"></a> + <span><a name="boost_regex.syntax.perl_syntax.character_sets"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_sets">Character + sets</a> + </h5> +<p> + A character set is a bracket-expression starting with <code class="literal">[</code> + and ending with <code class="literal">]</code>, it defines a set of characters, and + matches any single character that is a member of that set. + </p> +<p> + A bracket expression may contain any combination of the following: + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h12"></a> + <span><a name="boost_regex.syntax.perl_syntax.single_characters"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.single_characters">Single + characters</a> + </h6> +<p> + For example =[abc]=, will match any of the characters 'a', 'b', or 'c'. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h13"></a> + <span><a name="boost_regex.syntax.perl_syntax.character_ranges"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_ranges">Character + ranges</a> + </h6> +<p> + For example =[a-c]= will match any single character in the range 'a' to 'c'. + By default, for Perl regular expressions, a character x is within the range + y to z, if the code point of the character lies within the codepoints of + the endpoints of the range. Alternatively, if you set the <a class="link" href="../ref/syntax_option_type/syntax_option_type_perl.html" title="Options for Perl Regular Expressions"><code class="literal">collate</code> + flag</a> when constructing the regular expression, then ranges are locale + sensitive. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h14"></a> + <span><a name="boost_regex.syntax.perl_syntax.negation"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.negation">Negation</a> + </h6> +<p> + If the bracket-expression begins with the ^ character, then it matches the + complement of the characters it contains, for example =<code class="literal">a-c</code>= + matches any character that is not in the range <code class="literal">a-c</code>. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h15"></a> + <span><a name="boost_regex.syntax.perl_syntax.character_classes"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_classes">Character + classes</a> + </h6> +<p> + An expression of the form <code class="literal">[[:name:]]</code> matches the named + character class "name", for example <code class="literal">[[:lower:]]</code> + matches any lower case character. See <a class="link" href="character_classes.html" title="Character Class Names">character + class names</a>. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h16"></a> + <span><a name="boost_regex.syntax.perl_syntax.collating_elements"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.collating_elements">Collating + Elements</a> + </h6> +<p> + An expression of the form <code class="literal">[[.col.]]</code> matches the collating + element <span class="emphasis"><em>col</em></span>. A collating element is any single character, + or any sequence of characters that collates as a single unit. Collating elements + may also be used as the end point of a range, for example: <code class="literal">[[.ae.]-c]</code> + matches the character sequence "ae", plus any single character + in the range "ae"-c, assuming that "ae" is treated as + a single collating element in the current locale. + </p> +<p> + As an extension, a collating element may also be specified via it's <a class="link" href="collating_names.html" title="Collating Names">symbolic name</a>, for example: + </p> +<pre class="programlisting"><span class="special">[[.</span><span class="identifier">NUL</span><span class="special">.]]</span> +</pre> +<p> + matches a <code class="literal">\0</code> character. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h17"></a> + <span><a name="boost_regex.syntax.perl_syntax.equivalence_classes"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.equivalence_classes">Equivalence + classes</a> + </h6> +<p> + An expression of the form <code class="literal">[[=col=]]</code>, matches any character + or collating element whose primary sort key is the same as that for collating + element <span class="emphasis"><em>col</em></span>, as with collating elements the name <span class="emphasis"><em>col</em></span> + may be a <a class="link" href="collating_names.html" title="Collating Names">symbolic name</a>. + A primary sort key is one that ignores case, accentation, or locale-specific + tailorings; so for example <code class="computeroutput"><span class="special">[[=</span><span class="identifier">a</span><span class="special">=]]</span></code> matches + any of the characters: a, À, Á, Â, Ã, Ä, Å, A, à, á, â, ã, ä and å. Unfortunately implementation + of this is reliant on the platform's collation and localisation support; + this feature can not be relied upon to work portably across all platforms, + or even all locales on one platform. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h18"></a> + <span><a name="boost_regex.syntax.perl_syntax.escaped_characters"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.escaped_characters">Escaped + Characters</a> + </h6> +<p> + All the escape sequences that match a single character, or a single character + class are permitted within a character class definition. For example <code class="computeroutput"><span class="special">[\[\]]</span></code> would match either of <code class="computeroutput"><span class="special">[</span></code> or <code class="computeroutput"><span class="special">]</span></code> + while <code class="computeroutput"><span class="special">[\</span><span class="identifier">W</span><span class="special">\</span><span class="identifier">d</span><span class="special">]</span></code> + would match any character that is either a "digit", <span class="emphasis"><em>or</em></span> + is <span class="emphasis"><em>not</em></span> a "word" character. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h19"></a> + <span><a name="boost_regex.syntax.perl_syntax.combinations"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.combinations">Combinations</a> + </h6> +<p> + All of the above can be combined in one character set declaration, for example: + <code class="literal">[[:digit:]a-c[.NUL.]]</code>. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h20"></a> + <span><a name="boost_regex.syntax.perl_syntax.escapes"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.escapes">Escapes</a> + </h5> +<p> + Any special character preceded by an escape shall match itself. + </p> +<p> + The following escape sequences are all synonyms for single characters: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape + </p> + </th> +<th> + <p> + Character + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="literal">\a</code> + </p> + </td> +<td> + <p> + <code class="literal">\a</code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\e</code> + </p> + </td> +<td> + <p> + <code class="literal">0x1B</code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\f</code> + </p> + </td> +<td> + <p> + <code class="literal">\f</code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\n</code> + </p> + </td> +<td> + <p> + <code class="literal">\n</code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\r</code> + </p> + </td> +<td> + <p> + <code class="literal">\r</code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\t</code> + </p> + </td> +<td> + <p> + <code class="literal">\t</code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\v</code> + </p> + </td> +<td> + <p> + <code class="literal">\v</code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\b</code> + </p> + </td> +<td> + <p> + <code class="literal">\b</code> (but only inside a character class declaration). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\cX</code> + </p> + </td> +<td> + <p> + An ASCII escape sequence - the character whose code point is X + % 32 + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\xdd</code> + </p> + </td> +<td> + <p> + A hexadecimal escape sequence - matches the single character whose + code point is 0xdd. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\x{dddd}</code> + </p> + </td> +<td> + <p> + A hexadecimal escape sequence - matches the single character whose + code point is 0xdddd. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\0ddd</code> + </p> + </td> +<td> + <p> + An octal escape sequence - matches the single character whose code + point is 0ddd. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">\N{name}</code> + </p> + </td> +<td> + <p> + Matches the single character which has the <a class="link" href="collating_names.html" title="Collating Names">symbolic + name</a> <span class="emphasis"><em>name</em></span>. For example <code class="literal">\N{newline}</code> + matches the single character \n. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="boost_regex.syntax.perl_syntax.h21"></a> + <span><a name="boost_regex.syntax.perl_syntax._quot_single_character_quot__character_classes_"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax._quot_single_character_quot__character_classes_">"Single + character" character classes:</a> + </h6> +<p> + Any escaped character <span class="emphasis"><em>x</em></span>, if <span class="emphasis"><em>x</em></span> is + the name of a character class shall match any character that is a member + of that class, and any escaped character <span class="emphasis"><em>X</em></span>, if <span class="emphasis"><em>x</em></span> + is the name of a character class, shall match any character not in that class. + </p> +<p> + The following are supported by default: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Escape sequence + </p> + </th> +<th> + <p> + Equivalent to + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">d</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">l</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">lower</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">s</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">space</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">u</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">upper</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">w</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">word</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">h</span></code> + </p> + </td> +<td> + <p> + Horizontal whitespace + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">v</span></code> + </p> + </td> +<td> + <p> + Vertical whitespace + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">D</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">digit</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">L</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">lower</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">S</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">space</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">U</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">upper</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">W</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">word</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">H</span></code> + </p> + </td> +<td> + <p> + Not Horizontal whitespace + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">V</span></code> + </p> + </td> +<td> + <p> + Not Vertical whitespace + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="boost_regex.syntax.perl_syntax.h22"></a> + <span><a name="boost_regex.syntax.perl_syntax.character_properties"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_properties">Character + Properties</a> + </h6> +<p> + The character property names in the following table are all equivalent to + the <a class="link" href="character_classes.html" title="Character Class Names">names used in character + classes</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Form + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Equivalent character set form + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">pX</span></code> + </p> + </td> +<td> + <p> + Matches any character that has the property X. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">X</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">p</span><span class="special">{</span><span class="identifier">Name</span><span class="special">}</span></code> + </p> + </td> +<td> + <p> + Matches any character that has the property Name. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[[:</span><span class="identifier">Name</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">PX</span></code> + </p> + </td> +<td> + <p> + Matches any character that does not have the property X. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">X</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">\</span><span class="identifier">P</span><span class="special">{</span><span class="identifier">Name</span><span class="special">}</span></code> + </p> + </td> +<td> + <p> + Matches any character that does not have the property Name. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="special">[^[:</span><span class="identifier">Name</span><span class="special">:]]</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + For example <code class="literal">\pd</code> matches any "digit" character, + as does <code class="literal">\p{digit}</code>. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h23"></a> + <span><a name="boost_regex.syntax.perl_syntax.word_boundaries"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.word_boundaries">Word + Boundaries</a> + </h6> +<p> + The following escape sequences match the boundaries of words: + </p> +<p> + <code class="literal">\<</code> Matches the start of a word. + </p> +<p> + <code class="literal">\></code> Matches the end of a word. + </p> +<p> + <code class="literal">\b</code> Matches a word boundary (the start or end of a word). + </p> +<p> + <code class="literal">\B</code> Matches only when not at a word boundary. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h24"></a> + <span><a name="boost_regex.syntax.perl_syntax.buffer_boundaries"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.buffer_boundaries">Buffer + boundaries</a> + </h6> +<p> + The following match only at buffer boundaries: a "buffer" in this + context is the whole of the input text that is being matched against (note + that ^ and $ may match embedded newlines within the text). + </p> +<p> + \` Matches at the start of a buffer only. + </p> +<p> + \' Matches at the end of a buffer only. + </p> +<p> + \A Matches at the start of a buffer only (the same as =\`=). + </p> +<p> + \z Matches at the end of a buffer only (the same as <code class="literal">\\'</code>). + </p> +<p> + \Z Matches a zero-width assertion consisting of an optional sequence of newlines + at the end of a buffer: equivalent to the regular expression <code class="literal">(?=\v*\z)</code>. + Note that this is subtly different from Perl which behaves as if matching + <code class="literal">(?=\n?\z)</code>. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h25"></a> + <span><a name="boost_regex.syntax.perl_syntax.continuation_escape"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.continuation_escape">Continuation + Escape</a> + </h6> +<p> + The sequence <code class="literal">\G</code> matches only at the end of the last match + found, or at the start of the text being matched if no previous match was + found. This escape useful if you're iterating over the matches contained + within a text, and you want each subsequence match to start where the last + one ended. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h26"></a> + <span><a name="boost_regex.syntax.perl_syntax.quoting_escape"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.quoting_escape">Quoting + escape</a> + </h6> +<p> + The escape sequence <code class="literal">\Q</code> begins a "quoted sequence": + all the subsequent characters are treated as literals, until either the end + of the regular expression or \E is found. For example the expression: <code class="literal">\Q\*+\Ea+</code> + would match either of: + </p> +<pre class="programlisting"><span class="special">\*+</span><span class="identifier">a</span> +<span class="special">\*+</span><span class="identifier">aaa</span> +</pre> +<h6> +<a name="boost_regex.syntax.perl_syntax.h27"></a> + <span><a name="boost_regex.syntax.perl_syntax.unicode_escapes"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.unicode_escapes">Unicode + escapes</a> + </h6> +<p> + <code class="literal">\C</code> Matches a single code point: in Boost regex this has + exactly the same effect as a "." operator. <code class="literal">\X</code> + Matches a combining character sequence: that is any non-combining character + followed by a sequence of zero or more combining characters. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h28"></a> + <span><a name="boost_regex.syntax.perl_syntax.matching_line_endings"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.matching_line_endings">Matching Line + Endings</a> + </h6> +<p> + The escape sequence <code class="literal">\R</code> matches any line ending character + sequence, specifically it is identical to the expression <code class="literal">(?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}])</code>. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h29"></a> + <span><a name="boost_regex.syntax.perl_syntax.keeping_back_some_text"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.keeping_back_some_text">Keeping back + some text</a> + </h6> +<p> + <code class="literal">\K</code> Resets the start location of $0 to the current text + position: in other words everything to the left of \K is "kept back" + and does not form part of the regular expression match. $` is updated accordingly. + </p> +<p> + For example <code class="literal">foo\Kbar</code> matched against the text "foobar" + would return the match "bar" for $0 and "foo" for $`. + This can be used to simulate variable width lookbehind assertions. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h30"></a> + <span><a name="boost_regex.syntax.perl_syntax.any_other_escape"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.any_other_escape">Any + other escape</a> + </h6> +<p> + Any other escape sequence matches the character that is escaped, for example + \@ matches a literal '@'. + </p> +<h5> +<a name="boost_regex.syntax.perl_syntax.h31"></a> + <span><a name="boost_regex.syntax.perl_syntax.perl_extended_patterns"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.perl_extended_patterns">Perl Extended + Patterns</a> + </h5> +<p> + Perl-specific extensions to the regular expression syntax all start with + <code class="literal">(?</code>. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h32"></a> + <span><a name="boost_regex.syntax.perl_syntax.named_subexpressions"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.named_subexpressions">Named + Subexpressions</a> + </h6> +<p> + You can create a named subexpression using: + </p> +<pre class="programlisting"><span class="special">(?<</span><span class="identifier">NAME</span><span class="special">></span><span class="identifier">expression</span><span class="special">)</span> +</pre> +<p> + Which can be then be refered to by the name <span class="emphasis"><em>NAME</em></span>. Alternatively + you can delimit the name using 'NAME' as in: + </p> +<pre class="programlisting"><span class="special">(?</span><span class="char">'NAME'</span><span class="identifier">expression</span><span class="special">)</span> +</pre> +<p> + These named subexpressions can be refered to in a backreference using either + <code class="literal">\g{NAME}</code> or <code class="literal">\k<NAME></code> and can + also be refered to by name in a <a class="link" href="../format/perl_format.html" title="Perl Format String Syntax">Perl</a> + format string for search and replace operations, or in the <a class="link" href="../ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> member functions. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h33"></a> + <span><a name="boost_regex.syntax.perl_syntax.comments"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.comments">Comments</a> + </h6> +<p> + <code class="literal">(?# ... )</code> is treated as a comment, it's contents are ignored. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h34"></a> + <span><a name="boost_regex.syntax.perl_syntax.modifiers"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.modifiers">Modifiers</a> + </h6> +<p> + <code class="literal">(?imsx-imsx ... )</code> alters which of the perl modifiers are + in effect within the pattern, changes take effect from the point that the + block is first seen and extend to any enclosing <code class="literal">)</code>. Letters + before a '-' turn that perl modifier on, letters afterward, turn it off. + </p> +<p> + <code class="literal">(?imsx-imsx:pattern)</code> applies the specified modifiers to + pattern only. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h35"></a> + <span><a name="boost_regex.syntax.perl_syntax.non_marking_groups"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_marking_groups">Non-marking + groups</a> + </h6> +<p> + <code class="literal">(?:pattern)</code> lexically groups pattern, without generating + an additional sub-expression. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h36"></a> + <span><a name="boost_regex.syntax.perl_syntax.branch_reset"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.branch_reset">Branch + reset</a> + </h6> +<p> + <code class="literal">(?|pattern)</code> resets the subexpression count at the start + of each "|" alternative within <span class="emphasis"><em>pattern</em></span>. + </p> +<p> + The sub-expression count following this construct is that of whichever branch + had the largest number of sub-expressions. This construct is useful when + you want to capture one of a number of alternative matches in a single sub-expression + index. + </p> +<p> + In the following example the index of each sub-expression is shown below + the expression: + </p> +<pre class="programlisting"># before ---------------branch-reset----------- after +/ ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x +# 1 2 2 3 2 3 4 +</pre> +<h6> +<a name="boost_regex.syntax.perl_syntax.h37"></a> + <span><a name="boost_regex.syntax.perl_syntax.lookahead"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.lookahead">Lookahead</a> + </h6> +<p> + <code class="literal">(?=pattern)</code> consumes zero characters, only if pattern + matches. + </p> +<p> + <code class="literal">(?!pattern)</code> consumes zero characters, only if pattern + does not match. + </p> +<p> + Lookahead is typically used to create the logical AND of two regular expressions, + for example if a password must contain a lower case letter, an upper case + letter, a punctuation symbol, and be at least 6 characters long, then the + expression: + </p> +<pre class="programlisting"><span class="special">(?=.*[[:</span><span class="identifier">lower</span><span class="special">:]])(?=.*[[:</span><span class="identifier">upper</span><span class="special">:]])(?=.*[[:</span><span class="identifier">punct</span><span class="special">:]]).{</span><span class="number">6</span><span class="special">,}</span> +</pre> +<p> + could be used to validate the password. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h38"></a> + <span><a name="boost_regex.syntax.perl_syntax.lookbehind"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.lookbehind">Lookbehind</a> + </h6> +<p> + <code class="literal">(?<=pattern)</code> consumes zero characters, only if pattern + could be matched against the characters preceding the current position (pattern + must be of fixed length). + </p> +<p> + <code class="literal">(?<!pattern)</code> consumes zero characters, only if pattern + could not be matched against the characters preceding the current position + (pattern must be of fixed length). + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h39"></a> + <span><a name="boost_regex.syntax.perl_syntax.independent_sub_expressions"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.independent_sub_expressions">Independent + sub-expressions</a> + </h6> +<p> + <code class="literal">(?>pattern)</code> <span class="emphasis"><em>pattern</em></span> is matched + independently of the surrounding patterns, the expression will never backtrack + into <span class="emphasis"><em>pattern</em></span>. Independent sub-expressions are typically + used to improve performance; only the best possible match for pattern will + be considered, if this doesn't allow the expression as a whole to match then + no match is found at all. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h40"></a> + <span><a name="boost_regex.syntax.perl_syntax.recursive_expressions"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.recursive_expressions">Recursive + Expressions</a> + </h6> +<p> + <code class="literal">(?<span class="emphasis"><em>N</em></span>) (?-<span class="emphasis"><em>N</em></span>) (?+<span class="emphasis"><em>N</em></span>) + (?R) (?0) (?&NAME)</code> + </p> +<p> + <code class="literal">(?R)</code> and <code class="literal">(?0)</code> recurse to the start + of the entire pattern. + </p> +<p> + <code class="literal">(?<span class="emphasis"><em>N</em></span>)</code> executes sub-expression <span class="emphasis"><em>N</em></span> + recursively, for example <code class="literal">(?2)</code> will recurse to sub-expression + 2. + </p> +<p> + <code class="literal">(?-<span class="emphasis"><em>N</em></span>)</code> and <code class="literal">(?+<span class="emphasis"><em>N</em></span>)</code> + are relative recursions, so for example <code class="literal">(?-1)</code> recurses + to the last sub-expression to be declared, and <code class="literal">(?+1)</code> recurses + to the next sub-expression to be declared. + </p> +<p> + <code class="literal">(?&NAME)</code> recurses to named sub-expression <span class="emphasis"><em>NAME</em></span>. + </p> +<h6> +<a name="boost_regex.syntax.perl_syntax.h41"></a> + <span><a name="boost_regex.syntax.perl_syntax.conditional_expressions"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.conditional_expressions">Conditional + Expressions</a> + </h6> +<p> + <code class="literal">(?(condition)yes-pattern|no-pattern)</code> attempts to match + <span class="emphasis"><em>yes-pattern</em></span> if the <span class="emphasis"><em>condition</em></span> is + true, otherwise attempts to match <span class="emphasis"><em>no-pattern</em></span>. + </p> +<p> + <code class="literal">(?(condition)yes-pattern)</code> attempts to match <span class="emphasis"><em>yes-pattern</em></span> + if the <span class="emphasis"><em>condition</em></span> is true, otherwise fails. + </p> +<p> + <span class="emphasis"><em>condition</em></span> may be either: a forward lookahead assert, + the index of a marked sub-expression (the condition becomes true if the sub-expression + has been matched), or an index of a recursion (the condition become true + if we are executing directly inside the specified recursion). + </p> +<p> + Here is a summary of the possible predicates: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <code class="literal">(?(?=assert)yes-pattern|no-pattern)</code> Executes <span class="emphasis"><em>yes-pattern</em></span> + if the forward look-ahead assert matches, otherwise executes <span class="emphasis"><em>no-pattern</em></span>. + </li> +<li class="listitem"> + <code class="literal">(?(?!assert)yes-pattern|no-pattern)</code> Executes <span class="emphasis"><em>yes-pattern</em></span> + if the forward look-ahead assert does not match, otherwise executes + <span class="emphasis"><em>no-pattern</em></span>. + </li> +<li class="listitem"> + <code class="literal">(?(R)yes-pattern|no-pattern)</code> Executes <span class="emphasis"><em>yes-pattern</em></span> + if we are executing inside a recursion, otherwise executes <span class="emphasis"><em>no-pattern</em></span>. + </li> +<li class="listitem"> + <code class="literal">(?(R<span class="emphasis"><em>N</em></span>)yes-pattern|no-pattern)</code> + Executes <span class="emphasis"><em>yes-pattern</em></span> if we are executing inside + a recursion to sub-expression <span class="emphasis"><em>N</em></span>, otherwise executes + <span class="emphasis"><em>no-pattern</em></span>. + </li> +<li class="listitem"> + <code class="literal">(?(DEFINE)never-exectuted-pattern)</code> Defines a block + of code that is never executed and matches no characters: this is usually + used to define one or more named sub-expressions which are refered to + from elsewhere in the pattern. + </li> +</ul></div> +<h5> +<a name="boost_regex.syntax.perl_syntax.h42"></a> + <span><a name="boost_regex.syntax.perl_syntax.operator_precedence"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.operator_precedence">Operator + precedence</a> + </h5> +<p> + The order of precedence for of operators is as follows: + </p> +<div class="orderedlist"><ol class="orderedlist" type="1"> +<li class="listitem"> + Collation-related bracket symbols <code class="computeroutput"><span class="special">[==]</span> + <span class="special">[::]</span> <span class="special">[..]</span></code> + </li> +<li class="listitem"> + Escaped characters <code class="literal">\</code> + </li> +<li class="listitem"> + Character set (bracket expression) <code class="computeroutput"><span class="special">[]</span></code> + </li> +<li class="listitem"> + Grouping <code class="literal">()</code> + </li> +<li class="listitem"> + Single-character-ERE duplication <code class="literal">* + ? {m,n}</code> + </li> +<li class="listitem"> + Concatenation + </li> +<li class="listitem"> + Anchoring ^$ + </li> +<li class="listitem"> + Alternation | + </li> +</ol></div> +<h4> +<a name="boost_regex.syntax.perl_syntax.h43"></a> + <span><a name="boost_regex.syntax.perl_syntax.what_gets_matched"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.what_gets_matched">What + gets matched</a> + </h4> +<p> + If you view the regular expression as a directed (possibly cyclic) graph, + then the best match found is the first match found by a depth-first-search + performed on that graph, while matching the input text. + </p> +<p> + Alternatively: + </p> +<p> + The best match found is the <a class="link" href="leftmost_longest_rule.html" title="The Leftmost Longest Rule">leftmost + match</a>, with individual elements matched as follows; + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Construct + </p> + </th> +<th> + <p> + What gets matched + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="literal">AtomA AtomB</code> + </p> + </td> +<td> + <p> + Locates the best match for <span class="emphasis"><em>AtomA</em></span> that has + a following match for <span class="emphasis"><em>AtomB</em></span>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">Expression1 | Expression2</code> + </p> + </td> +<td> + <p> + If <span class="emphasis"><em>Expresion1</em></span> can be matched then returns + that match, otherwise attempts to match <span class="emphasis"><em>Expression2</em></span>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">S{N}</code> + </p> + </td> +<td> + <p> + Matches <span class="emphasis"><em>S</em></span> repeated exactly N times. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">S{N,M}</code> + </p> + </td> +<td> + <p> + Matches S repeated between N and M times, and as many times as + possible. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">S{N,M}?</code> + </p> + </td> +<td> + <p> + Matches S repeated between N and M times, and as few times as possible. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">S?, S*, S+</code> + </p> + </td> +<td> + <p> + The same as <code class="literal">S{0,1}</code>, <code class="literal">S{0,UINT_MAX}</code>, + <code class="literal">S{1,UINT_MAX}</code> respectively. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">S??, S*?, S+?</code> + </p> + </td> +<td> + <p> + The same as <code class="literal">S{0,1}?</code>, <code class="literal">S{0,UINT_MAX}?</code>, + <code class="literal">S{1,UINT_MAX}?</code> respectively. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">(?>S)</code> + </p> + </td> +<td> + <p> + Matches the best match for <span class="emphasis"><em>S</em></span>, and only that. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">(?=S), (?<=S)</code> + </p> + </td> +<td> + <p> + Matches only the best match for <span class="emphasis"><em>S</em></span> (this is + only visible if there are capturing parenthesis within <span class="emphasis"><em>S</em></span>). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">(?!S), (?<!S)</code> + </p> + </td> +<td> + <p> + Considers only whether a match for S exists or not. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="literal">(?(condition)yes-pattern | no-pattern)</code> + </p> + </td> +<td> + <p> + If condition is true, then only yes-pattern is considered, otherwise + only no-pattern is considered. + </p> + </td> +</tr> +</tbody> +</table></div> +<h4> +<a name="boost_regex.syntax.perl_syntax.h44"></a> + <span><a name="boost_regex.syntax.perl_syntax.variations"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.variations">Variations</a> + </h4> +<p> + The <a class="link" href="../ref/syntax_option_type/syntax_option_type_perl.html" title="Options for Perl Regular Expressions">options + <code class="literal">normal</code>, <code class="literal">ECMAScript</code>, <code class="literal">JavaScript</code> + and <code class="literal">JScript</code></a> are all synonyms for <code class="literal">perl</code>. + </p> +<h4> +<a name="boost_regex.syntax.perl_syntax.h45"></a> + <span><a name="boost_regex.syntax.perl_syntax.options"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.options">Options</a> + </h4> +<p> + There are a <a class="link" href="../ref/syntax_option_type/syntax_option_type_perl.html" title="Options for Perl Regular Expressions">variety + of flags</a> that may be combined with the <code class="literal">perl</code> option + when constructing the regular expression, in particular note that the <code class="literal">newline_alt</code> + option alters the syntax, while the <code class="literal">collate</code>, <code class="literal">nosubs</code> + and <code class="literal">icase</code> options modify how the case and locale sensitivity + are to be applied. + </p> +<h4> +<a name="boost_regex.syntax.perl_syntax.h46"></a> + <span><a name="boost_regex.syntax.perl_syntax.pattern_modifiers"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.pattern_modifiers">Pattern + Modifiers</a> + </h4> +<p> + The perl <code class="literal">smix</code> modifiers can either be applied using a + <code class="literal">(?smix-smix)</code> prefix to the regular expression, or with + one of the <a class="link" href="../ref/syntax_option_type/syntax_option_type_perl.html" title="Options for Perl Regular Expressions">regex-compile + time flags <code class="literal">no_mod_m</code>, <code class="literal">mod_x</code>, <code class="literal">mod_s</code>, + and <code class="literal">no_mod_s</code></a>. + </p> +<h4> +<a name="boost_regex.syntax.perl_syntax.h47"></a> + <span><a name="boost_regex.syntax.perl_syntax.references"></a></span><a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.references">References</a> + </h4> +<p> + <a href="http://perldoc.perl.org/perlre.html" target="_top">Perl 5.8</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../syntax.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../syntax.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="basic_extended.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/boost_regex/unicode.html b/libs/regex/doc/html/boost_regex/unicode.html new file mode 100644 index 0000000000..03c08b37d2 --- /dev/null +++ b/libs/regex/doc/html/boost_regex/unicode.html @@ -0,0 +1,86 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Unicode and Boost.Regex</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Boost.Regex"> +<link rel="up" href="../index.html" title="Boost.Regex"> +<link rel="prev" href="introduction_and_overview.html" title="Introduction and Overview"> +<link rel="next" href="captures.html" title="Understanding Marked Sub-Expressions and Captures"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="introduction_and_overview.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="captures.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_regex.unicode"></a><a class="link" href="unicode.html" title="Unicode and Boost.Regex">Unicode and Boost.Regex</a> +</h2></div></div></div> +<p> + There are two ways to use Boost.Regex with Unicode strings: + </p> +<h5> +<a name="boost_regex.unicode.h0"></a> + <span><a name="boost_regex.unicode.rely_on_wchar_t"></a></span><a class="link" href="unicode.html#boost_regex.unicode.rely_on_wchar_t">Rely + on wchar_t</a> + </h5> +<p> + If your platform's <code class="computeroutput"><span class="keyword">wchar_t</span></code> type + can hold Unicode strings, and your platform's C/C++ runtime correctly handles + wide character constants (when passed to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iswspace</span></code> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iswlower</span></code> etc), then you can use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">wregex</span></code> + to process Unicode. However, there are several disadvantages to this approach: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + It's not portable: there's no guarantee on the width of <code class="computeroutput"><span class="keyword">wchar_t</span></code>, + or even whether the runtime treats wide characters as Unicode at all, most + Windows compilers do so, but many Unix systems do not. + </li> +<li class="listitem"> + There's no support for Unicode-specific character classes: <code class="computeroutput"><span class="special">[[:</span><span class="identifier">Nd</span><span class="special">:]]</span></code>, <code class="computeroutput"><span class="special">[[:</span><span class="identifier">Po</span><span class="special">:]]</span></code> + etc. + </li> +<li class="listitem"> + You can only search strings that are encoded as sequences of wide characters, + it is not possible to search UTF-8, or even UTF-16 on many platforms. + </li> +</ul></div> +<h5> +<a name="boost_regex.unicode.h1"></a> + <span><a name="boost_regex.unicode.use_a_unicode_aware_regular_expression_type_"></a></span><a class="link" href="unicode.html#boost_regex.unicode.use_a_unicode_aware_regular_expression_type_">Use + a Unicode Aware Regular Expression Type.</a> + </h5> +<p> + If you have the <a href="http://www.ibm.com/software/globalization/icu/" target="_top">ICU + library</a>, then Boost.Regex can be <a class="link" href="install.html#boost_regex.install.building_with_unicode_and_icu_support">configured + to make use of it</a>, and provide a distinct regular expression type (boost::u32regex), + that supports both Unicode specific character properties, and the searching + of text that is encoded in either UTF-8, UTF-16, or UTF-32. See: <a class="link" href="ref/non_std_strings/icu.html" title="Working With Unicode and ICU String Types">ICU + string class support</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 1998-2010 John Maddock<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="introduction_and_overview.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="captures.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/regex/doc/html/index.html b/libs/regex/doc/html/index.html new file mode 100644 index 0000000000..ab6d835409 --- /dev/null +++ b/libs/regex/doc/html/index.html @@ -0,0 +1,207 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Boost.Regex</title> +<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="index.html" title="Boost.Regex"> +<link rel="next" href="boost_regex/configuration.html" title="Configuration"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td> +<td align="center"><a href="../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"><a accesskey="n" href="boost_regex/configuration.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> +<div class="article"> +<div class="titlepage"> +<div> +<div><h2 class="title"> +<a name="boost_regex"></a>Boost.Regex</h2></div> +<div><div class="authorgroup"><div class="author"><h3 class="author"> +<span class="firstname">John</span> <span class="surname">Maddock</span> +</h3></div></div></div> +<div><p class="copyright">Copyright © 1998-2010 John Maddock</p></div> +<div><div class="legalnotice"> +<a name="boost_regex.legal"></a><p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></div> +</div> +<hr> +</div> +<div class="toc"> +<p><b>Table of Contents</b></p> +<dl> +<dt><span class="section"><a href="boost_regex/configuration.html">Configuration</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/configuration/compiler.html">Compiler Setup</a></span></dt> +<dt><span class="section"><a href="boost_regex/configuration/locale.html">Locale and traits class + selection</a></span></dt> +<dt><span class="section"><a href="boost_regex/configuration/linkage.html">Linkage Options</a></span></dt> +<dt><span class="section"><a href="boost_regex/configuration/algorithm.html">Algorithm Selection</a></span></dt> +<dt><span class="section"><a href="boost_regex/configuration/tuning.html">Algorithm Tuning</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/install.html">Building and Installing the Library</a></span></dt> +<dt><span class="section"><a href="boost_regex/introduction_and_overview.html">Introduction and + Overview</a></span></dt> +<dt><span class="section"><a href="boost_regex/unicode.html">Unicode and Boost.Regex</a></span></dt> +<dt><span class="section"><a href="boost_regex/captures.html">Understanding Marked Sub-Expressions + and Captures</a></span></dt> +<dt><span class="section"><a href="boost_regex/partial_matches.html">Partial Matches</a></span></dt> +<dt><span class="section"><a href="boost_regex/syntax.html">Regular Expression Syntax</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/syntax/perl_syntax.html">Perl Regular Expression + Syntax</a></span></dt> +<dt><span class="section"><a href="boost_regex/syntax/basic_extended.html">POSIX Extended Regular + Expression Syntax</a></span></dt> +<dt><span class="section"><a href="boost_regex/syntax/basic_syntax.html">POSIX Basic Regular + Expression Syntax</a></span></dt> +<dt><span class="section"><a href="boost_regex/syntax/character_classes.html">Character Class + Names</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/syntax/character_classes/std_char_clases.html">Character + Classes that are Always Supported</a></span></dt> +<dt><span class="section"><a href="boost_regex/syntax/character_classes/optional_char_class_names.html">Character + classes that are supported by Unicode Regular Expressions</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/syntax/collating_names.html">Collating Names</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/syntax/collating_names/digraphs.html">Digraphs</a></span></dt> +<dt><span class="section"><a href="boost_regex/syntax/collating_names/posix_symbolic_names.html">POSIX + Symbolic Names</a></span></dt> +<dt><span class="section"><a href="boost_regex/syntax/collating_names/named_unicode.html">Named + Unicode Characters</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/syntax/leftmost_longest_rule.html">The Leftmost + Longest Rule</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/format.html">Search and Replace Format String Syntax</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/format/sed_format.html">Sed Format String Syntax</a></span></dt> +<dt><span class="section"><a href="boost_regex/format/perl_format.html">Perl Format String Syntax</a></span></dt> +<dt><span class="section"><a href="boost_regex/format/boost_format_syntax.html">Boost-Extended + Format String Syntax</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/ref.html">Reference</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/ref/basic_regex.html">basic_regex</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/match_results.html">match_results</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/sub_match.html">sub_match</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/regex_match.html">regex_match</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/regex_search.html">regex_search</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/regex_replace.html">regex_replace</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/regex_iterator.html">regex_iterator</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/regex_token_iterator.html">regex_token_iterator</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/bad_expression.html">bad_expression</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/syntax_option_type.html">syntax_option_type</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/ref/syntax_option_type/syntax_option_type_synopsis.html">syntax_option_type + Synopsis</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/syntax_option_type/syntax_option_type_overview.html">Overview + of syntax_option_type</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/syntax_option_type/syntax_option_type_perl.html">Options + for Perl Regular Expressions</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/syntax_option_type/syntax_option_type_extended.html">Options + for POSIX Extended Regular Expressions</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/syntax_option_type/syntax_option_type_basic.html">Options + for POSIX Basic Regular Expressions</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/syntax_option_type/syntax_option_type_literal.html">Options + for Literal Strings</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/ref/match_flag_type.html">match_flag_type</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/error_type.html">error_type</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/regex_traits.html">regex_traits</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings.html">Interfacing With Non-Standard + String Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/icu.html">Working With Unicode + and ICU String Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/icu/intro.html">Introduction + to using Regex with ICU</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/icu/unicode_types.html">Unicode + regular expression types</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/icu/unicode_algo.html">Unicode + Regular Expression Algorithms</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/icu/unicode_iter.html">Unicode + Aware Regex Iterators</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/mfc_strings.html">Using + Boost Regex With MFC Strings</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/mfc_strings/mfc_intro.html">Introduction + to Boost.Regex and MFC Strings</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_types.html">Regex + Types Used With MFC Strings</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_create.html">Regular + Expression Creation From an MFC String</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html">Overloaded + Algorithms For MFC String Types</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html">Iterating + Over the Matches Within An MFC String</a></span></dt> +</dl></dd> +</dl></dd> +<dt><span class="section"><a href="boost_regex/ref/posix.html">POSIX Compatible C API's</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/concepts.html">Concepts</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/ref/concepts/charT_concept.html">charT Requirements</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/concepts/traits_concept.html">Traits Class + Requirements</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/concepts/iterator_concepts.html">Iterator + Requirements</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/ref/deprecated_interfaces.html">Deprecated Interfaces</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/ref/deprecated_interfaces/regex_format.html">regex_format + (Deprecated)</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/deprecated_interfaces/regex_grep.html">regex_grep + (Deprecated)</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/deprecated_interfaces/regex_split.html">regex_split + (deprecated)</a></span></dt> +<dt><span class="section"><a href="boost_regex/ref/deprecated_interfaces/old_regex.html">High + Level Class RegEx (Deprecated)</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_regex/ref/internal_details.html">Internal Details</a></span></dt> +<dd><dl><dt><span class="section"><a href="boost_regex/ref/internal_details/uni_iter.html">Unicode + Iterators</a></span></dt></dl></dd> +</dl></dd> +<dt><span class="section"><a href="boost_regex/background_information.html">Background Information</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_regex/background_information/headers.html">Headers</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/locale.html">Localization</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/thread_safety.html">Thread + Safety</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/examples.html">Test and + Example Programs</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/futher.html">References + and Further Information</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/faq.html">FAQ</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/performance.html">Performance</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/standards.html">Standards + Conformance</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/redist.html">Redistributables</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/acknowledgements.html">Acknowledgements</a></span></dt> +<dt><span class="section"><a href="boost_regex/background_information/history.html">History</a></span></dt> +</dl></dd> +</dl> +</div> +<p> + A printer-friendly <a href="http://sourceforge.net/projects/boost/files/boost-docs/" target="_top">PDF + version of this manual is also available</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"><p><small>Last revised: December 24, 2011 at 18:02:12 GMT</small></p></td> +<td align="right"><div class="copyright-footer"></div></td> +</tr></table> +<hr> +<div class="spirit-nav"><a accesskey="n" href="boost_regex/configuration.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> +</body> +</html> diff --git a/libs/regex/doc/icu_strings.qbk b/libs/regex/doc/icu_strings.qbk new file mode 100644 index 0000000000..758f1d25b0 --- /dev/null +++ b/libs/regex/doc/icu_strings.qbk @@ -0,0 +1,484 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:icu Working With Unicode and ICU String Types] + +[section:intro Introduction to using Regex with ICU] + +The header: + + <boost/regex/icu.hpp> + +contains the data types and algorithms necessary for working with regular +expressions in a Unicode aware environment. + +In order to use this header you will need the +[@http://www.ibm.com/software/globalization/icu/ ICU library], and you will need +to have built the Boost.Regex library with +[link boost_regex.install.building_with_unicode_and_icu_support ICU support enabled]. + +The header will enable you to: + +* Create regular expressions that treat Unicode strings as sequences of UTF-32 code points. +* Create regular expressions that support various Unicode data properties, including character classification. +* Transparently search Unicode strings that are encoded as either UTF-8, UTF-16 or UTF-32. + +[endsect] + +[section:unicode_types Unicode regular expression types] + +Header `<boost/regex/icu.hpp>` provides a regular expression traits class that +handles UTF-32 characters: + + class icu_regex_traits; + +and a regular expression type based upon that: + + typedef basic_regex<UChar32,icu_regex_traits> u32regex; + +The type `u32regex` is regular expression type to use for all Unicode +regular expressions; internally it uses UTF-32 code points, but can be +created from, and used to search, either UTF-8, or UTF-16 encoded strings +as well as UTF-32 ones. + +The constructors, and assign member functions of `u32regex`, require UTF-32 +encoded strings, but there are a series of overloaded algorithms called +`make_u32regex` which allow regular expressions to be created from +UTF-8, UTF-16, or UTF-32 encoded strings: + + template <class InputIterator> + u32regex make_u32regex(InputIterator i, + InputIterator j, + boost::regex_constants::syntax_option_type opt); + +[*Effects]: Creates a regular expression object from the iterator sequence \[i,j). +The character encoding of the sequence is determined based upon sizeof(*i): +1 implies UTF-8, 2 implies UTF-16, and 4 implies UTF-32. + + u32regex make_u32regex(const char* p, + boost::regex_constants::syntax_option_type opt + = boost::regex_constants::perl); + +[*Effects]: Creates a regular expression object from the Null-terminated +UTF-8 characater sequence /p/. + + u32regex make_u32regex(const unsigned char* p, + boost::regex_constants::syntax_option_type opt + = boost::regex_constants::perl); + +[*Effects]: Creates a regular expression object from the Null-terminated UTF-8 characater sequence p. + + u32regex make_u32regex(const wchar_t* p, + boost::regex_constants::syntax_option_type opt + = boost::regex_constants::perl); + +[*Effects]: Creates a regular expression object from the Null-terminated characater sequence p. The character encoding of the sequence is determined based upon sizeof(wchar_t): 1 implies UTF-8, 2 implies UTF-16, and 4 implies UTF-32. + + u32regex make_u32regex(const UChar* p, + boost::regex_constants::syntax_option_type opt + = boost::regex_constants::perl); + +[*Effects]: Creates a regular expression object from the Null-terminated UTF-16 characater sequence p. + + template<class C, class T, class A> + u32regex make_u32regex(const std::basic_string<C, T, A>& s, + boost::regex_constants::syntax_option_type opt + = boost::regex_constants::perl); + +[*Effects]: Creates a regular expression object from the string s. The character encoding of the string is determined based upon sizeof(C): 1 implies UTF-8, 2 implies UTF-16, and 4 implies UTF-32. + + u32regex make_u32regex(const UnicodeString& s, + boost::regex_constants::syntax_option_type opt + = boost::regex_constants::perl); + +[*Effects]: Creates a regular expression object from the UTF-16 encoding string s. + +[endsect] + +[section:unicode_algo Unicode Regular Expression Algorithms] + +The regular expression algorithms [regex_match], [regex_search] and [regex_replace] +all expect that the character sequence upon which they operate, +is encoded in the same character encoding as the regular expression object +with which they are used. For Unicode regular expressions that behavior is +undesirable: while we may want to process the data in UTF-32 "chunks", the +actual data is much more likely to encoded as either UTF-8 or UTF-16. +Therefore the header <boost/regex/icu.hpp> provides a series of thin wrappers +around these algorithms, called `u32regex_match`, `u32regex_search`, and +`u32regex_replace`. These wrappers use iterator-adapters internally to +make external UTF-8 or UTF-16 data look as though it's really a UTF-32 sequence, +that can then be passed on to the "real" algorithm. + +[h4 u32regex_match] + +For each [regex_match] algorithm defined by `<boost/regex.hpp>`, then +`<boost/regex/icu.hpp>` defines an overloaded algorithm that takes the +same arguments, but which is called `u32regex_match`, and which will +accept UTF-8, UTF-16 or UTF-32 encoded data, as well as an +ICU UnicodeString as input. + +Example: match a password, encoded in a UTF-16 UnicodeString: + + // + // Find out if *password* meets our password requirements, + // as defined by the regular expression *requirements*. + // + bool is_valid_password(const UnicodeString& password, const UnicodeString& requirements) + { + return boost::u32regex_match(password, boost::make_u32regex(requirements)); + } + +Example: match a UTF-8 encoded filename: + + // + // Extract filename part of a path from a UTF-8 encoded std::string and return the result + // as another std::string: + // + std::string get_filename(const std::string& path) + { + boost::u32regex r = boost::make_u32regex("(?:\\A|.*\\\\)([^\\\\]+)"); + boost::smatch what; + if(boost::u32regex_match(path, what, r)) + { + // extract $1 as a std::string: + return what.str(1); + } + else + { + throw std::runtime_error("Invalid pathname"); + } + } + +[h4 u32regex_search] + +For each [regex_search] algorithm defined by `<boost/regex.hpp>`, then +`<boost/regex/icu.hpp>` defines an overloaded algorithm that takes the +same arguments, but which is called `u32regex_search`, and which will +accept UTF-8, UTF-16 or UTF-32 encoded data, as well as an ICU +UnicodeString as input. + +Example: search for a character sequence in a specific language block: + + UnicodeString extract_greek(const UnicodeString& text) + { + // searches through some UTF-16 encoded text for a block encoded in Greek, + // this expression is imperfect, but the best we can do for now - searching + // for specific scripts is actually pretty hard to do right. + // + // Here we search for a character sequence that begins with a Greek letter, + // and continues with characters that are either not-letters ( [^[:L*:]] ) + // or are characters in the Greek character block ( [\\x{370}-\\x{3FF}] ). + // + boost::u32regex r = boost::make_u32regex( + L"[\\x{370}-\\x{3FF}](?:[^[:L*:]]|[\\x{370}-\\x{3FF}])*"); + boost::u16match what; + if(boost::u32regex_search(text, what, r)) + { + // extract $0 as a UnicodeString: + return UnicodeString(what[0].first, what.length(0)); + } + else + { + throw std::runtime_error("No Greek found!"); + } + } + +[h4 u32regex_replace] + +For each [regex_replace] algorithm defined by `<boost/regex.hpp>`, then +`<boost/regex/icu.hpp>` defines an overloaded algorithm that takes +the same arguments, but which is called `u32regex_replace`, and which will +accept UTF-8, UTF-16 or UTF-32 encoded data, as well as an ICU +UnicodeString as input. The input sequence and the format string specifier +passed to the algorithm, can be encoded independently (for example one can +be UTF-8, the other in UTF-16), but the result string / output iterator +argument must use the same character encoding as the text being searched. + +Example: Credit card number reformatting: + + // + // Take a credit card number as a string of digits, + // and reformat it as a human readable string with "-" + // separating each group of four digit;, + // note that we're mixing a UTF-32 regex, with a UTF-16 + // string and a UTF-8 format specifier, and it still all + // just works: + // + const boost::u32regex e = boost::make_u32regex( + "\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"); + const char* human_format = "$1-$2-$3-$4"; + + UnicodeString human_readable_card_number(const UnicodeString& s) + { + return boost::u32regex_replace(s, e, human_format); + } + +[endsect] +[section:unicode_iter Unicode Aware Regex Iterators] + +[h4 u32regex_iterator] + +Type `u32regex_iterator` is in all respects the same as [regex_iterator] +except that since the regular expression type is always `u32regex` +it only takes one template parameter (the iterator type). It also calls +`u32regex_search` internally, allowing it to interface correctly with +UTF-8, UTF-16, and UTF-32 data: + + template <class BidirectionalIterator> + class u32regex_iterator + { + // for members see regex_iterator + }; + + typedef u32regex_iterator<const char*> utf8regex_iterator; + typedef u32regex_iterator<const UChar*> utf16regex_iterator; + typedef u32regex_iterator<const UChar32*> utf32regex_iterator; + +In order to simplify the construction of a `u32regex_iterator` from a string, +there are a series of non-member helper functions called make_u32regex_iterator: + + u32regex_iterator<const char*> + make_u32regex_iterator(const char* s, + const u32regex& e, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_iterator<const wchar_t*> + make_u32regex_iterator(const wchar_t* s, + const u32regex& e, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_iterator<const UChar*> + make_u32regex_iterator(const UChar* s, + const u32regex& e, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class Traits, class Alloc> + u32regex_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> + make_u32regex_iterator(const std::basic_string<charT, Traits, Alloc>& s, + const u32regex& e, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_iterator<const UChar*> + make_u32regex_iterator(const UnicodeString& s, + const u32regex& e, + regex_constants::match_flag_type m = regex_constants::match_default); + +Each of these overloads returns an iterator that enumerates all occurrences +of expression /e/, in text /s/, using match_flags /m/. + +Example: search for international currency symbols, along with their associated numeric value: + + void enumerate_currencies(const std::string& text) + { + // enumerate and print all the currency symbols, along + // with any associated numeric values: + const char* re = + "([[:Sc:]][[:Cf:][:Cc:][:Z*:]]*)?" + "([[:Nd:]]+(?:[[:Po:]][[:Nd:]]+)?)?" + "(?(1)" + "|(?(2)" + "[[:Cf:][:Cc:][:Z*:]]*" + ")" + "[[:Sc:]]" + ")"; + boost::u32regex r = boost::make_u32regex(re); + boost::u32regex_iterator<std::string::const_iterator> + i(boost::make_u32regex_iterator(text, r)), j; + while(i != j) + { + std::cout << (*i)[0] << std::endl; + ++i; + } + } + +Calling + +[/this doesn't format correctly as code:] +[pre enumerate_currencies(" $100.23 or '''£'''198.12 ");] + +Yields the output: + +[pre +$100.23 +'''£'''198.12 +] + +Provided of course that the input is encoded as UTF-8. + +[h4 u32regex_token_iterator] + +Type `u32regex_token_iterator` is in all respects the same as [regex_token_iterator] +except that since the regular expression type is always `u32regex` it only +takes one template parameter (the iterator type). It also calls +`u32regex_search` internally, allowing it to interface correctly with UTF-8, +UTF-16, and UTF-32 data: + + template <class BidirectionalIterator> + class u32regex_token_iterator + { + // for members see regex_token_iterator + }; + + typedef u32regex_token_iterator<const char*> utf8regex_token_iterator; + typedef u32regex_token_iterator<const UChar*> utf16regex_token_iterator; + typedef u32regex_token_iterator<const UChar32*> utf32regex_token_iterator; + +In order to simplify the construction of a `u32regex_token_iterator` from a string, +there are a series of non-member helper functions called `make_u32regex_token_iterator`: + + u32regex_token_iterator<const char*> + make_u32regex_token_iterator( + const char* s, + const u32regex& e, + int sub, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_token_iterator<const wchar_t*> + make_u32regex_token_iterator( + const wchar_t* s, + const u32regex& e, + int sub, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_token_iterator<const UChar*> + make_u32regex_token_iterator( + const UChar* s, + const u32regex& e, + int sub, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class Traits, class Alloc> + u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> + make_u32regex_token_iterator( + const std::basic_string<charT, Traits, Alloc>& s, + const u32regex& e, + int sub, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_token_iterator<const UChar*> + make_u32regex_token_iterator( + const UnicodeString& s, + const u32regex& e, + int sub, + regex_constants::match_flag_type m = regex_constants::match_default); + +Each of these overloads returns an iterator that enumerates all occurrences of +marked sub-expression sub in regular expression /e/, found in text /s/, using +match_flags /m/. + + template <std::size_t N> + u32regex_token_iterator<const char*> + make_u32regex_token_iterator( + const char* p, + const u32regex& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + + template <std::size_t N> + u32regex_token_iterator<const wchar_t*> + make_u32regex_token_iterator( + const wchar_t* p, + const u32regex& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + + template <std::size_t N> + u32regex_token_iterator<const UChar*> + make_u32regex_token_iterator( + const UChar* p, + const u32regex& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class Traits, class Alloc, std::size_t N> + u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> + make_u32regex_token_iterator( + const std::basic_string<charT, Traits, Alloc>& p, + const u32regex& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + + template <std::size_t N> + u32regex_token_iterator<const UChar*> + make_u32regex_token_iterator( + const UnicodeString& s, + const u32regex& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + +Each of these overloads returns an iterator that enumerates one sub-expression +for each submatch in regular expression /e/, found in text /s/, using match_flags /m/. + + u32regex_token_iterator<const char*> + make_u32regex_token_iterator( + const char* p, + const u32regex& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_token_iterator<const wchar_t*> + make_u32regex_token_iterator( + const wchar_t* p, + const u32regex& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_token_iterator<const UChar*> + make_u32regex_token_iterator( + const UChar* p, + const u32regex& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class Traits, class Alloc> + u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> + make_u32regex_token_iterator( + const std::basic_string<charT, Traits, Alloc>& p, + const u32regex& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + + u32regex_token_iterator<const UChar*> + make_u32regex_token_iterator( + const UnicodeString& s, + const u32regex& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + +Each of these overloads returns an iterator that enumerates one sub-expression for +each submatch in regular expression /e/, found in text /s/, using match_flags /m/. + +Example: search for international currency symbols, along with their associated numeric value: + + void enumerate_currencies2(const std::string& text) + { + // enumerate and print all the currency symbols, along + // with any associated numeric values: + const char* re = + "([[:Sc:]][[:Cf:][:Cc:][:Z*:]]*)?" + "([[:Nd:]]+(?:[[:Po:]][[:Nd:]]+)?)?" + "(?(1)" + "|(?(2)" + "[[:Cf:][:Cc:][:Z*:]]*" + ")" + "[[:Sc:]]" + ")"; + boost::u32regex r = boost::make_u32regex(re); + boost::u32regex_token_iterator<std::string::const_iterator> + i(boost::make_u32regex_token_iterator(text, r, 1)), j; + while(i != j) + { + std::cout << *i << std::endl; + ++i; + } + } + +[endsect] + +[endsect] + diff --git a/libs/regex/doc/install.qbk b/libs/regex/doc/install.qbk new file mode 100644 index 0000000000..a795fc668f --- /dev/null +++ b/libs/regex/doc/install.qbk @@ -0,0 +1,290 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:install Building and Installing the Library] + +When you extract the library from its zip file, you must preserve its internal +directory structure (for example by using the -d option when extracting). If you +didn't do that when extracting, then you'd better stop reading this, delete the +files you just extracted, and try again! + +This library should not need configuring before use; most popular compilers\/standard +libraries\/platforms are already supported "as is". If you do experience configuration +problems, or just want to test the configuration with your compiler, then the +process is the same as for all of boost; see the +[@../../../config/index.html configuration library documentation]. + +The library will encase all code inside namespace boost. + +Unlike some other template libraries, this library consists of a mixture of +template code (in the headers) and static code and data (in cpp files). +Consequently it is necessary to build the library's support code into a +library or archive file before you can use it, instructions for specific +platforms are as follows: + +[h4 Building with bjam] + +This is now the preferred method for building and installing this library, +please refer to the +[@../../../../more/getting_started.html getting started guide] for more information. + +[h4 Building With Unicode and ICU Support] + +Boost.Regex is now capable of performing a configuration check +to test whether ICU is already installed in your compiler's +search paths. When you build you should see a message like +this: + + Performing configuration checks + + - has_icu builds : yes + +Whick means that ICU has been found, and support for it will be enabled +in the library build. + +[tip If you don't want the regex library to use ICU then build with the +"--disable-icu" command line option.] + +If instead you see: + + Performing configuration checks + + - has_icu builds : no + +Then ICU was not found and support for it will not be compiled into the library. +If you think that it should have been found, then you will need to take a look +at the contents of the file ['boost-root/bin.v2/config.log] for the actual error +messages obtained when the build carried out the configuration check. You will +then need to fix these errors by ensuring your compiler gets invoked with the correct +options, for example: + +[pre bjam include=some-include-path --toolset=toolset-name install] + +will add "some-include-path" to your compilers header include path, or if ICU +has been built with non-standard names for it's binaries, then: + +[pre bjam -sICU_LINK="linker-options-for-icu" --toolset=toolset-name install] + +Will use ['"linker-options-for-icu"] when linking the library rather than the default +ICU binary names. + +You might also need to use the options "cxxflags=-option" and "linkflags=-option" to set compiler and linker +specific options. + +[important Configuration results are cached - if you try rebuilding with different compiler +options then add an "-a" to the bjam command line to force all targets to be rebuilt.] + +If ICU is not already in your compiler's path, but instead headers, libraries and binaries +are located at ['path-to-icu/include], ['path-to-icu/lib] and ['path-to-icu/bin] respectively +then you need to set the environment variable `ICU_PATH` to point to the root directory of your +ICU installation: this typically happens if you're building with MSVC. +For example if ICU was installed to `c:\download\icu` you +might use: + +[pre bjam -sICU_PATH=c:\download\icu --toolset=toolset-name install] + +[important ICU is a C++ library just like Boost is, as such your copy of +ICU must have been built with the same C++ compiler (and compiler version) +that you are using to build Boost. Boost.Regex will not work correctly unless +you ensure that this is the case: it is up to you to ensure that the version +of ICU you are using is binary compatible with the toolset you use to build Boost.] + +And finally, if you want to build/test with multiple compiler versions, all with different ICU +builds, then the only way to achieve that currently is to modify your user-config.jam so that +each toolset has the necessary compiler/linker options set so that ICU is found automatically +by the configuration step (providing the ICU binaries use the standard names, all you have to +add is the appropriate header-include and linker-search paths). + +[h4 Building via makefiles] + +[h5 Borland C++ Builder:] + +* Open up a console window and change to the `<boost>\libs\regex\build` directory. +* Select the appropriate makefile (bcb4.mak for C++ Builder 4, bcb5.mak for C++ Builder 5, and bcb6.mak for C++ Builder 6). +* Invoke the makefile (pass the full path to your version of make if you have more than one version installed, the makefile relies on the path to make to obtain your C++ Builder installation directory and tools) for example: + +[pre make -fbcb5.mak] + +The build process will build a variety of .lib and .dll files (the exact number +depends upon the version of Borland's tools you are using) the .lib and dll +files will be in a sub-directory called bcb4 or bcb5 depending upon the +makefile used. To install the libraries into your development system use: + +[pre make -fbcb5.mak install] + +library files will be copied to `<BCROOT>/lib` and the dll's to `<BCROOT>/bin`, +where `<BCROOT>` corresponds to the install path of your Borland C++ tools. + +You may also remove temporary files created during the build process +(excluding lib and dll files) by using: + +[pre make -fbcb5.mak clean] + +Finally when you use Boost.Regex it is only necessary for you to add the +`<boost>` root director to your list of include directories for that project. +It is not necessary for you to manually add a .lib file to the project; +the headers will automatically select the correct .lib file for your build mode +and tell the linker to include it. There is one caveat however: the library +can not tell the difference between VCL and non-VCL enabled builds when building +a GUI application from the command line, if you build from the command line +with the 5.5 command line tools then you must define the pre-processor symbol +_NO_VCL in order to ensure that the correct link libraries are selected: the +C++ Builder IDE normally sets this automatically. Hint, users of the +5.5 command line tools may want to add a -D_NO_VCL to bcc32.cfg in order to +set this option permanently. + +If you would prefer to do a dynamic link to the regex libraries when using the +dll runtime then define BOOST_REGEX_DYN_LINK (you must do this if you want to +use Boost.Regex in multiple dll's), otherwise Boost.Regex will be statically +linked by default. + +If you want to suppress automatic linking altogether (and supply your own +custom build of the lib) then define BOOST_REGEX_NO_LIB. + +If you are building with C++ Builder 6, you will find that `<boost/regex.hpp>` can +not be used in a pre-compiled header (the actual problem is in `<locale>` which +gets included by `<boost/regex.hpp>`), if this causes problems for you, +then try defining BOOST_NO_STD_LOCALE when building, this will disable some +features throughout boost, but may save you a lot in compile times! + +[h4 Microsoft Visual C++ 6, 7, 7.1 and 8] + +You need version 6 or later of MSVC to build this library. If you are using VC5 +then you may want to look at one of the previous releases of this library. + +Open up a command prompt, which has the necessary MSVC environment variables +defined (for example by using the batch file Vcvars32.bat installed by the +Visual Studio installation), and change to the `<boost>\libs\regex\build directory`. + +Select the correct makefile - vc6.mak for "vanilla" Visual C++ 6 or +vc6-stlport.mak if you are using STLPort. + +Invoke the makefile like this: + +[pre nmake -fvc6.mak] + +You will now have a collection of lib and dll files in a "vc6" subdirectory, to +install these into your development system use: + +[pre nmake -fvc6.mak install] + +The lib files will be copied to your `<VC6>\lib` directory and the dll files to +`<VC6>\bin`, where `<VC6>` is the root of your Visual C++ 6 installation. + +You can delete all the temporary files created during the build (excluding lib and +dll files) using: + +[pre nmake -fvc6.mak clean ] + +If you want to build with ICU support, then you need to pass the path to your +ICU directory to the makefile, for example with: + +[pre nmake ICU_PATH=c:\open-source\icu -fvc71.mak install] + +Finally when you use Boost.Regex it is only necessary for you to add the +`<boost>` root directory to your list of include directories for that project. +It is not necessary for you to manually add a .lib file to the project; +the headers will automatically select the correct .lib file for your build mode +and tell the linker to include it. + +Note that if you want to dynamically link to the regex library when using the +dynamic C++ runtime, define BOOST_REGEX_DYN_LINK when building your project. + +If you want to add the source directly to your project then define +BOOST_REGEX_NO_LIB to disable automatic library selection. + +There are several important caveats to remember when using Boost.Regex with +Microsoft's Compiler: + +* There have been some reports of compiler-optimization bugs affecting this library, +(particularly with VC6 versions prior to service patch 5) the workaround is to +build the library using /Oityb1 rather than /O2. That is to use all optimization settings +except /Oa. This problem is reported to affect some standard library code as well ( +in fact I'm not sure if the problem is with the regex code or the underlying standard library), +so it's probably worthwhile applying this workaround in normal practice in any case. +* If you have replaced the C++ standard library that comes with VC6, then when you +build the library you must ensure that the environment variables "INCLUDE" and "LIB" +have been updated to reflect the include and library paths for the new library - see +vcvars32.bat (part of your Visual Studio installation) for more details. +* If you are building with the full STLPort v4.x, then use the vc6-stlport.mak +file provided and set the environment variable STLPORT_PATH to point to the location of +your STLPort installation (Note that the full STLPort libraries appear not to +support single-thread static builds). +* If you are building your application with /Zc:wchar_t then you will need to +modify the makefile to add /Zc:wchar_t before building the library. + +[h5 GCC(2.95 and later)] + +You can build with gcc using the normal boost Jamfile in `<boost>/libs/regex/build`, +alternatively there is a conservative makefile for the g++ compiler. From +the command prompt change to the <boost>/libs/regex/build directory and type: + +[pre make -fgcc.mak ] + +At the end of the build process you should have a gcc sub-directory containing +release and debug versions of the library (libboost_regex.a and libboost_regex_debug.a). When you build projects that use regex++, you will need to add the boost install directory to your list of include paths and add <boost>/libs/regex/build/gcc/libboost_regex.a to your list of library files. + +There is also a makefile to build the library as a shared library: + +[pre make -fgcc-shared.mak] + +which will build libboost_regex.so and libboost_regex_debug.so. + +Both of the these makefiles support the following environment variables: + +ICU_PATH: tells the makefile to build with Unicode support, set to the path where your ICU installation is located, for example with: make ICU_PATH=/usr/local install -fgcc.mak + +CXXFLAGS: extra compiler options - note that this applies to both the debug and release builds. + +INCLUDES: additional include directories. + +LDFLAGS: additional linker options. + +LIBS: additional library files. + +For the more adventurous there is a configure script in `<boost>/libs/config`; see +the [@../../../config/index.html config library documentation]. + +[h5 Sun Workshop 6.1] + +There is a makefile for the sun (6.1) compiler (C++ version 3.12). From the command +prompt change to the `<boost>/libs/regex/build` directory and type: + +[pre dmake -f sunpro.mak ] + +At the end of the build process you should have a sunpro sub-directory containing single +and multithread versions of the library (libboost_regex.a, libboost_regex.so, +libboost_regex_mt.a and libboost_regex_mt.so). When you build projects that use +Boost.Regex, you will need to add the boost install directory to your list of +include paths and add `<boost>/libs/regex/build/sunpro/` to your library search path. + +Both of the these makefiles support the following environment variables: + +CXXFLAGS: extra compiler options - note that this applies to both the single and multithreaded builds. + +INCLUDES: additional include directories. + +LDFLAGS: additional linker options. + +LIBS: additional library files. + +LIBSUFFIX: a suffix to mangle the library name with (defaults to nothing). + +This makefile does not set any architecture specific options like -xarch=v9, you can set these by defining the appropriate macros, for example: + +[pre dmake CXXFLAGS="-xarch=v9" LDFLAGS="-xarch=v9" LIBSUFFIX="_v9" -f sunpro.mak] + +will build v9 variants of the regex library named libboost_regex_v9.a etc. + +[h5 Makefiles for Other compilers] + +There is a generic makefile (generic.mak ) provided in `<boost-root>/libs/regex/build` + - see that makefile for details of environment variables that need to be set + before use. + +[endsect] + diff --git a/libs/regex/doc/introduction.qbk b/libs/regex/doc/introduction.qbk new file mode 100644 index 0000000000..fb8c0bbf4a --- /dev/null +++ b/libs/regex/doc/introduction.qbk @@ -0,0 +1,163 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section Introduction and Overview] + +Regular expressions are a form of pattern-matching that are often used in +text processing; many users will be familiar with the Unix utilities grep, sed +and awk, and the programming language Perl, each of which make extensive use +of regular expressions. Traditionally C++ users have been limited to the +POSIX C API's for manipulating regular expressions, and while Boost.Regex does +provide these API's, they do not represent the best way to use the library. +For example Boost.Regex can cope with wide character strings, or search and +replace operations (in a manner analogous to either sed or Perl), something +that traditional C libraries can not do. + +The class [basic_regex] is the key class in this library; it represents a +"machine readable" regular expression, and is very closely modeled on +`std::basic_string`, think of it as a string plus the actual state-machine +required by the regular expression algorithms. Like `std::basic_string` there +are two typedefs that are almost always the means by which this class is referenced: + + namespace boost{ + + template <class charT, + class traits = regex_traits<charT> > + class basic_regex; + + typedef basic_regex<char> regex; + typedef basic_regex<wchar_t> wregex; + + } + +To see how this library can be used, imagine that we are writing a credit +card processing application. Credit card numbers generally come as a string +of 16-digits, separated into groups of 4-digits, and separated by either a +space or a hyphen. Before storing a credit card number in a database +(not necessarily something your customers will appreciate!), we may want to +verify that the number is in the correct format. To match any digit we could +use the regular expression \[0-9\], however ranges of characters like this are +actually locale dependent. Instead we should use the POSIX standard +form \[\[:digit:\]\], or the Boost.Regex and Perl shorthand for this \\d (note +that many older libraries tended to be hard-coded to the C-locale, +consequently this was not an issue for them). That leaves us with the +following regular expression to validate credit card number formats: + +[pre (\d{4}\[- \]){3}\d{4}] + +Here the parenthesis act to group (and mark for future reference) +sub-expressions, and the {4} means "repeat exactly 4 times". This is an +example of the extended regular expression syntax used by Perl, awk and egrep. +Boost.Regex also supports the older "basic" syntax used by sed and grep, +but this is generally less useful, unless you already have some basic regular +expressions that you need to reuse. + +Now let's take that expression and place it in some C++ code to validate the +format of a credit card number: + + bool validate_card_format(const std::string& s) + { + static const boost::regex e("(\\d{4}[- ]){3}\\d{4}"); + return regex_match(s, e); + } + +Note how we had to add some extra escapes to the expression: remember that +the escape is seen once by the C++ compiler, before it gets to be seen by +the regular expression engine, consequently escapes in regular expressions +have to be doubled up when embedding them in C/C++ code. Also note that +all the examples assume that your compiler supports argument-dependent-lookup +lookup, if yours doesn't (for example VC6), then you will have to add some +`boost::` prefixes to some of the function calls in the examples. + +Those of you who are familiar with credit card processing, will have realized +that while the format used above is suitable for human readable card numbers, +it does not represent the format required by online credit card systems; these +require the number as a string of 16 (or possibly 15) digits, without any +intervening spaces. What we need is a means to convert easily between the two +formats, and this is where search and replace comes in. Those who are familiar +with the utilities sed and Perl will already be ahead here; we need two +strings - one a regular expression - the other a "format string" that provides +a description of the text to replace the match with. In Boost.Regex this +search and replace operation is performed with the algorithm [regex_replace], +for our credit card example we can write two algorithms like this to +provide the format conversions: + + // match any format with the regular expression: + const boost::regex e("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"); + const std::string machine_format("\\1\\2\\3\\4"); + const std::string human_format("\\1-\\2-\\3-\\4"); + + std::string machine_readable_card_number(const std::string s) + { + return regex_replace(s, e, machine_format, boost::match_default | boost::format_sed); + } + + std::string human_readable_card_number(const std::string s) + { + return regex_replace(s, e, human_format, boost::match_default | boost::format_sed); + } + +Here we've used marked sub-expressions in the regular expression to split out +the four parts of the card number as separate fields, the format string then +uses the sed-like syntax to replace the matched text with the reformatted version. + +In the examples above, we haven't directly manipulated the results of +a regular expression match, however in general the result of a match contains +a number of sub-expression matches in addition to the overall match. When the +library needs to report a regular expression match it does so using an instance +of the class [match_results], as before there are typedefs of this class for +the most common cases: + + namespace boost{ + + typedef match_results<const char*> cmatch; + typedef match_results<const wchar_t*> wcmatch; + typedef match_results<std::string::const_iterator> smatch; + typedef match_results<std::wstring::const_iterator> wsmatch; + + } + +The algorithms [regex_search] and [regex_match] make use of [match_results] +to report what matched; the difference between these algorithms is that +[regex_match] will only find matches that consume /all/ of the input text, +where as [regex_search] will search for a match anywhere within the text being matched. + +Note that these algorithms are not restricted to searching regular C-strings, +any bidirectional iterator type can be searched, allowing for the +possibility of seamlessly searching almost any kind of data. + +For search and replace operations, in addition to the algorithm [regex_replace] +that we have already seen, the [match_results] class has a `format` member that +takes the result of a match and a format string, and produces a new string +by merging the two. + +For iterating through all occurences of an expression within a text, +there are two iterator types: [regex_iterator] will enumerate over the +[match_results] objects found, while [regex_token_iterator] will enumerate +a series of strings (similar to perl style split operations). + +For those that dislike templates, there is a high level wrapper class +[RegEx] that is an encapsulation of the lower level template code - it +provides a simplified interface for those that don't need the full +power of the library, and supports only narrow characters, and the +"extended" regular expression syntax. This class is now deprecated as +it does not form part of the regular expressions C++ standard library proposal. + +The POSIX API functions: [regcomp], [regexec], [regfree] and [regerr], +are available in both narrow character and Unicode versions, and are +provided for those who need compatibility with these API's. + +Finally, note that the library now has +[link boost_regex.background_information.locale run-time localization support], +and recognizes the full POSIX regular expression syntax - including +advanced features like multi-character collating elements and equivalence +classes - as well as providing compatibility with other regular expression +libraries including GNU and BSD4 regex packages, PCRE and Perl 5. + +[endsect] + + diff --git a/libs/regex/doc/leftmost_longest.qbk b/libs/regex/doc/leftmost_longest.qbk new file mode 100644 index 0000000000..c50cde23a3 --- /dev/null +++ b/libs/regex/doc/leftmost_longest.qbk @@ -0,0 +1,32 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:leftmost_longest_rule The Leftmost Longest Rule] + +Often there is more than one way of matching a regular expression at a +particular location, for POSIX basic and extended regular expressions, +the "best" match is determined as follows: + +# Find the leftmost match, if there is only one match possible at +this location then return it. +# Find the longest of the possible matches, along with any ties. +If there is only one such possible match then return it. +# If there are no marked sub-expressions, then all the remaining +alternatives are indistinguishable; return the first of these found. +# Find the match which has matched the first sub-expression in the +leftmost position, along with any ties. If there is only on such +match possible then return it. +# Find the match which has the longest match for the first sub-expression, +along with any ties. If there is only one such match then return it. +# Repeat steps 4 and 5 for each additional marked sub-expression. +# If there is still more than one possible match remaining, then they are +indistinguishable; return the first one found. + +[endsect] + + diff --git a/libs/regex/doc/locale.qbk b/libs/regex/doc/locale.qbk new file mode 100644 index 0000000000..1e3c15c502 --- /dev/null +++ b/libs/regex/doc/locale.qbk @@ -0,0 +1,231 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:locale Localization] + +Boost.Regex provides extensive support for run-time localization, the +localization model used can be split into two parts: front-end and back-end. + +Front-end localization deals with everything which the user sees - +error messages, and the regular expression syntax itself. For example a +French application could change \[\[:word:\]\] to \[\[:mot:\]\] and \\w to \\m. +Modifying the front end locale requires active support from the developer, +by providing the library with a message catalogue to load, containing the +localized strings. Front-end locale is affected by the LC_MESSAGES category only. + +Back-end localization deals with everything that occurs after the expression +has been parsed - in other words everything that the user does not see or +interact with directly. It deals with case conversion, collation, and character +class membership. The back-end locale does not require any intervention from +the developer - the library will acquire all the information it requires for +the current locale from the underlying operating system / run time library. +This means that if the program user does not interact with regular +expressions directly - for example if the expressions are embedded in your +C++ code - then no explicit localization is required, as the library will +take care of everything for you. For example embedding the expression +\[\[:word:\]\]+ in your code will always match a whole word, if the +program is run on a machine with, for example, a Greek locale, then it +will still match a whole word, but in Greek characters rather than Latin ones. +The back-end locale is affected by the LC_TYPE and LC_COLLATE categories. + +There are three separate localization mechanisms supported by Boost.Regex: + +[h4 Win32 localization model.] + +This is the default model when the library is compiled under Win32, and is +encapsulated by the traits class `w32_regex_traits`. When this model is in +effect each [basic_regex] object gets it's own LCID, by default this is +the users default setting as returned by GetUserDefaultLCID, but you can +call imbue on the `basic_regex` object to set it's locale to some other +LCID if you wish. All the settings used by Boost.Regex are acquired directly +from the operating system bypassing the C run time library. Front-end +localization requires a resource dll, containing a string table with the +user-defined strings. The traits class exports the function: + + static std::string set_message_catalogue(const std::string& s); + +which needs to be called with a string identifying the name of the resource +dll, before your code compiles any regular expressions (but not necessarily +before you construct any `basic_regex` instances): + + boost::w32_regex_traits<char>::set_message_catalogue("mydll.dll"); + +The library provides full Unicode support under NT, under Windows 9x +the library degrades gracefully - characters 0 to 255 are supported, the +remainder are treated as "unknown" graphic characters. + +[h4 C localization model.] + +This model has been deprecated in favor of the C++ locale for all non-Windows +compilers that support it. This locale is encapsulated by the traits class +`c_regex_traits`, Win32 users can force this model to take effect by +defining the pre-processor symbol BOOST_REGEX_USE_C_LOCALE. When this model is +in effect there is a single global locale, as set by `setlocale`. All settings +are acquired from your run time library, consequently Unicode support is +dependent upon your run time library implementation. + +Front end localization is not supported. + +Note that calling setlocale invalidates all compiled regular expressions, +calling `setlocale(LC_ALL, "C")` will make this library behave equivalent to +most traditional regular expression libraries including version 1 of this library. + +[h4 C++ localization model.] + +This model is the default for non-Windows compilers. + +When this model is in effect each instance of [basic_regex] has its own +instance of `std::locale`, class [basic_regex] also has a member function +`imbue` which allows the locale for the expression to be set on a +per-instance basis. Front end localization requires a POSIX message catalogue, +which will be loaded via the `std::messages` facet of the expression's locale, +the traits class exports the symbol: + + static std::string set_message_catalogue(const std::string& s); + +which needs to be called with a string identifying the name of the +message catalogue, before your code compiles any regular expressions +(but not necessarily before you construct any basic_regex instances): + + boost::cpp_regex_traits<char>::set_message_catalogue("mycatalogue"); + +Note that calling `basic_regex<>::imbue` will invalidate any expression +currently compiled in that instance of [basic_regex]. + +Finally note that if you build the library with a non-default localization model, +then the appropriate pre-processor symbol (BOOST_REGEX_USE_C_LOCALE or +BOOST_REGEX_USE_CPP_LOCALE) must be defined both when you build the support +library, and when you include `<boost/regex.hpp>` or `<boost/cregex.hpp>` +in your code. The best way to ensure this is to add the #define to +`<boost/regex/user.hpp>`. + +[h4 Providing a message catalogue] + +In order to localize the front end of the library, you need to provide the +library with the appropriate message strings contained either in a resource +dll's string table (Win32 model), or a POSIX message catalogue (C++ models). +In the latter case the messages must appear in message set zero of the +catalogue. The messages and their id's are as follows: + +[table + [[Message][id][Meaning][Default value]] + [[101][The character used to start a sub-expression.]["(" ]] + [[102][The character used to end a sub-expression declaration.][")" ]] + [[103][The character used to denote an end of line assertion.]["$" ]] + [[104][The character used to denote the start of line assertion.]["^" ]] + [[105][The character used to denote the "match any character expression".]["." ]] + [[106][The match zero or more times repetition operator.]["*" ]] + [[107][The match one or more repetition operator.]["+" ]] + [[108][The match zero or one repetition operator.]["?" ]] + [[109][The character set opening character.]["\[" ]] + [[110][The character set closing character.]["\]" ]] + [[111][The alternation operator.]["|" ]] + [[112][The escape character.]["\\" ]] + [[113][The hash character (not currently used).]["#" ]] + [[114][The range operator.]["-" ]] + [[115][The repetition operator opening character.]["{" ]] + [[116][The repetition operator closing character.]["}" ]] + [[117][The digit characters.]["0123456789" ]] + [[118][The character which when preceded by an escape character represents the word boundary assertion.]["b" ]] + [[119][The character which when preceded by an escape character represents the non-word boundary assertion.]["B" ]] + [[120][The character which when preceded by an escape character represents the word-start boundary assertion.]["<" ]] + [[121][The character which when preceded by an escape character represents the word-end boundary assertion.][">" ]] + [[122][The character which when preceded by an escape character represents any word character.]["w" ]] + [[123][The character which when preceded by an escape character represents a non-word character.]["W" ]] + [[124][The character which when preceded by an escape character represents a start of buffer assertion.]["`A" ]] + [[125][The character which when preceded by an escape character represents an end of buffer assertion.]["'z" ]] + [[126][The newline character. ]["\\n" ]] + [[127][The comma separator.]["," ]] + [[128][The character which when preceded by an escape character represents the bell character.]["a" ]] + [[129][The character which when preceded by an escape character represents the form feed character.]["f" ]] + [[130][The character which when preceded by an escape character represents the newline character.]["n" ]] + [[131][The character which when preceded by an escape character represents the carriage return character.]["r" ]] + [[132][The character which when preceded by an escape character represents the tab character.]["t" ]] + [[133][The character which when preceded by an escape character represents the vertical tab character.]["v" ]] + [[134][The character which when preceded by an escape character represents the start of a hexadecimal character constant.]["x" ]] + [[135][The character which when preceded by an escape character represents the start of an ASCII escape character.]["c" ]] + [[136][The colon character.][":" ]] + [[137][The equals character.]["=" ]] + [[138][The character which when preceded by an escape character represents the ASCII escape character.]["e" ]] + [[139][The character which when preceded by an escape character represents any lower case character.]["l" ]] + [[140][The character which when preceded by an escape character represents any non-lower case character.]["L" ]] + [[141][The character which when preceded by an escape character represents any upper case character.]["u" ]] + [[142][The character which when preceded by an escape character represents any non-upper case character.]["U" ]] + [[143][The character which when preceded by an escape character represents any space character.]["s" ]] + [[144][The character which when preceded by an escape character represents any non-space character.]["S" ]] + [[145][The character which when preceded by an escape character represents any digit character.]["d" ]] + [[146][The character which when preceded by an escape character represents any non-digit character.]["D" ]] + [[147][The character which when preceded by an escape character represents the end quote operator.]["E" ]] + [[148][The character which when preceded by an escape character represents the start quote operator.]["Q" ]] + [[149][The character which when preceded by an escape character represents a Unicode combining character sequence.]["X" ]] + [[150][The character which when preceded by an escape character represents any single character.]["C" ]] + [[151][The character which when preceded by an escape character represents end of buffer operator.]["Z" ]] + [[152][The character which when preceded by an escape character represents the continuation assertion.]["G" ]] + [[153][The character which when preceeded by (? indicates a zero width negated forward lookahead assert.][! ]] +] + +Custom error messages are loaded as follows: + +[table + [[Message ID][Error message ID][Default string ]] + [[201][REG_NOMATCH]["No match" ]] + [[202][REG_BADPAT]["Invalid regular expression" ]] + [[203][REG_ECOLLATE]["Invalid collation character" ]] + [[204][REG_ECTYPE]["Invalid character class name" ]] + [[205][REG_EESCAPE]["Trailing backslash" ]] + [[206][REG_ESUBREG]["Invalid back reference" ]] + [[207][REG_EBRACK]["Unmatched [ or [^" ]] + [[208][REG_EPAREN]["Unmatched ( or \\(" ]] + [[209][REG_EBRACE]["Unmatched \\{" ]] + [[210][REG_BADBR]["Invalid content of \\{\\}" ]] + [[211][REG_ERANGE]["Invalid range end" ]] + [[212][REG_ESPACE]["Memory exhausted" ]] + [[213][REG_BADRPT]["Invalid preceding regular expression" ]] + [[214][REG_EEND]["Premature end of regular expression" ]] + [[215][REG_ESIZE]["Regular expression too big" ]] + [[216][REG_ERPAREN]["Unmatched ) or \\)" ]] + [[217][REG_EMPTY]["Empty expression" ]] + [[218][REG_E_UNKNOWN]["Unknown error" ]] +] + +Custom character class names are loaded as followed: + +[table + [[Message ID][Description][Equivalent default class name ]] + [[300][The character class name for alphanumeric characters.]["alnum" ]] + [[301][The character class name for alphabetic characters.]["alpha" ]] + [[302][The character class name for control characters.]["cntrl" ]] + [[303][The character class name for digit characters.]["digit" ]] + [[304][The character class name for graphics characters.]["graph" ]] + [[305][The character class name for lower case characters.]["lower" ]] + [[306][The character class name for printable characters.]["print" ]] + [[307][The character class name for punctuation characters.]["punct" ]] + [[308][The character class name for space characters.]["space" ]] + [[309][The character class name for upper case characters.]["upper" ]] + [[310][The character class name for hexadecimal characters.]["xdigit" ]] + [[311][The character class name for blank characters.]["blank" ]] + [[312][The character class name for word characters.]["word" ]] + [[313][The character class name for Unicode characters.]["unicode" ]] +] + +Finally, custom collating element names are loaded starting from message +id 400, and terminating when the first load thereafter fails. Each message +looks something like: "tagname string" where tagname is the name used +inside [[.tagname.]] and string is the actual text of the collating element. +Note that the value of collating element [[.zero.]] is used for the +conversion of strings to numbers - if you replace this with another value then +that will be used for string parsing - for example use the Unicode +character 0x0660 for [[.zero.]] if you want to use Unicode Arabic-Indic +digits in your regular expressions in place of Latin digits. + +Note that the POSIX defined names for character classes and collating elements +are always available - even if custom names are defined, in contrast, +custom error messages, and custom syntax messages replace the default ones. + +[endsect] + + diff --git a/libs/regex/doc/match_flag_type.qbk b/libs/regex/doc/match_flag_type.qbk new file mode 100644 index 0000000000..e6fe8f8b64 --- /dev/null +++ b/libs/regex/doc/match_flag_type.qbk @@ -0,0 +1,123 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:match_flag_type match_flag_type] + +The type `match_flag_type` is an implementation specific bitmask type +(see C++ std 17.3.2.1.2) that controls how a regular expression is +matched against a character sequence. The behavior of the format +flags is described in more detail in the +[link boost_regex.format format syntax guide]. + + namespace boost{ namespace regex_constants{ + + typedef implemenation-specific-bitmask-type match_flag_type; + + static const match_flag_type match_default = 0; + static const match_flag_type match_not_bob; + static const match_flag_type match_not_eob; + static const match_flag_type match_not_bol; + static const match_flag_type match_not_eol; + static const match_flag_type match_not_bow; + static const match_flag_type match_not_eow; + static const match_flag_type match_any; + static const match_flag_type match_not_null; + static const match_flag_type match_continuous; + static const match_flag_type match_partial; + static const match_flag_type match_single_line; + static const match_flag_type match_prev_avail; + static const match_flag_type match_not_dot_newline; + static const match_flag_type match_not_dot_null; + static const match_flag_type match_posix; + static const match_flag_type match_perl; + static const match_flag_type match_nosubs; + static const match_flag_type match_extra; + + static const match_flag_type format_default = 0; + static const match_flag_type format_sed; + static const match_flag_type format_perl; + static const match_flag_type format_literal; + + static const match_flag_type format_no_copy; + static const match_flag_type format_first_only; + static const match_flag_type format_all; + + } // namespace regex_constants + } // namespace boost + +[h4 Description] + +The type `match_flag_type` is an implementation specific bitmask type +(see C++ std 17.3.2.1.2). When matching a regular expression against a +sequence of characters \[first, last) then setting its elements has the +effects listed in the table below: + +[table +[[Element][Effect if set]] +[[match_default][Specifies that matching of regular expressions proceeds without any modification of the normal rules used in ECMA-262, ECMAScript Language Specification, Chapter 15 part 10, RegExp (Regular Expression) Objects (FWD.1)]] +[[match_not_bob][Specifies that the expressions "\\A" and "\\`" should not match against the sub-sequence \[first,first).]] +[[match_not_eob][Specifies that the expressions "\\'", "\\z" and "\\Z" should not match against the sub-sequence \[last,last).]] +[[match_not_bol][Specifies that the expression "^" should not be matched against the sub-sequence \[first,first).]] +[[match_not_eol][Specifies that the expression "$" should not be matched against the sub-sequence \[last,last).]] +[[match_not_bow][Specifies that the expressions "\\<" and "\\b" should not be matched against the sub-sequence \[first,first).]] +[[match_not_eow][Specifies that the expressions "\\>" and "\\b" should not be matched against the sub-sequence \[last,last).]] +[[match_any][Specifies that if more than one match is possible then any match is an acceptable result: this will still find the leftmost match, but may not find the "best" match at that position. Use this flag if you care about the speed of matching, but don't care what was matched (only whether there is one or not).]] +[[match_not_null][Specifies that the expression can not be matched against an empty sequence.]] +[[match_continuous][Specifies that the expression must match a sub-sequence that begins at first.]] +[[match_partial][Specifies that if no match can be found, then it is acceptable to return a match \[from, last) such that from!= last, if there could exist some longer sequence of characters \[from,to) of which \[from,last) is a prefix, and which would result in a full match. +This flag is used when matching incomplete or very long texts, see the partial matches documentation for more information.]] +[[match_extra][Instructs the matching engine to retain all available capture information; if a capturing group is repeated then information about every repeat is available via match_results::captures() or sub_match_captures().]] +[[match_single_line][Equivalent to the inverse of Perl's m/ modifier; prevents ^ from matching after an embedded newline character (so that it only matches at the start of the text being matched), and $ from matching before an embedded newline (so that it only matches at the end of the text being matched).]] +[[match_prev_avail][Specifies that --first is a valid iterator position, when this flag is set then the flags match_not_bol and match_not_bow are ignored by the regular expression algorithms (RE.7) and iterators (RE.8).]] +[[match_not_dot_newline][Specifies that the expression "." does not match a newline character. This is the inverse of Perl's s/ modifier.]] +[[match_not_dot_null][Specifies that the expression "." does not match a character null '\\0'.]] +[[match_posix][Specifies that the expression should be matched according to the POSIX + [link boost_regex.syntax.leftmost_longest_rule leftmost-longest rule], + regardless of what kind of expression was compiled. + Be warned that these rules do not work well with many Perl-specific features + such as non-greedy repeats.]] +[[match_perl][Specifies that the expression should be matched according to + the [link boost_regex.syntax.perl_syntax.what_gets_matched Perl matching rules], + irrespective of what kind of expression was + compiled.]] +[[match_nosubs][Makes the expression behave as if it had no marked + subexpressions, no matter how many capturing groups are actually + present. The [match_results] class will only contain information + about the overall match, and not any sub-expressions.]] + +[[format_default][Specifies that when a regular expression match is to be + replaced by a new string, that the new string is constructed using the rules + used by the ECMAScript replace function in ECMA-262, ECMAScript Language + Specification, Chapter 15 part 5.4.11 String.prototype.replace. (FWD.1). + + This is functionally identical to the [link boost_regex.format.perl_format Perl format string rules]. + + In addition during search and replace operations then all non-overlapping + occurrences of the regular expression are located and replaced, and sections + of the input that did not match the expression, are copied unchanged to the + output string.]] +[[format_sed][Specifies that when a regular expression match is to be + replaced by a new string, that the new string is constructed using + the rules used by the Unix sed utility in IEEE Std 1003.1-2001, + Portable Operating SystemInterface (POSIX ), Shells and Utilities. + See also the [link boost_regex.format.sed_format Sed Format string reference].]] +[[format_perl][Specifies that when a regular expression match is to be replaced by + a new string, that the new string is constructed using + [link boost_regex.format.perl_format the same rules as Perl 5].]] +[[format_literal][Specifies that when a regular expression match is to be + replaced by a new string, that the new string is a literal copy of + the replacement text.]] +[[format_all][Specifies that all syntax extensions are enabled, including + conditional (?ddexpression1:expression2) replacements: see + the [link boost_regex.format.boost_format_syntax format string guide] for more details.]] +[[format_no_copy][When specified during a search and replace operation, then sections of the character container sequence being searched that do match the regular expression, are not copied to the output string.]] +[[format_first_only][When specified during a search and replace operation, then only the first occurrence of the regular expression is replaced.]] +] + +[endsect] + + diff --git a/libs/regex/doc/match_result.qbk b/libs/regex/doc/match_result.qbk new file mode 100644 index 0000000000..eb4b7b6989 --- /dev/null +++ b/libs/regex/doc/match_result.qbk @@ -0,0 +1,564 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:match_results match_results] + +[h4 Synopsis] + + #include <boost/regex.hpp> + +Regular expressions are different from many simple pattern-matching algorithms +in that as well as finding an overall match they can also produce +sub-expression matches: each sub-expression being delimited in the +pattern by a pair of parenthesis (...). There has to be some method for +reporting sub-expression matches back to the user: this is achieved this by +defining a class `match_results` that acts as an indexed collection of +sub-expression matches, each sub-expression match being contained in an +object of type [sub_match]. + +Template class `match_results` denotes a collection of character +sequences representing the result of a regular expression match. Objects of +type `match_results` are passed to the algorithms [regex_match] and [regex_search], +and are returned by the iterator [regex_iterator]. Storage for the +collection is allocated and freed as necessary by the member functions of +class `match_results`. + +The template class `match_results` conforms to the requirements of a Sequence, +as specified in (lib.sequence.reqmts), except that only operations defined for +const-qualified Sequences are supported. + +Class template `match_results` is most commonly used as one of the typedefs +`cmatch`, `wcmatch`, `smatch`, or `wsmatch`: + + template <class BidirectionalIterator, + class Allocator = std::allocator<sub_match<BidirectionalIterator> > + class match_results; + + typedef match_results<const char*> cmatch; + typedef match_results<const wchar_t*> wcmatch; + typedef match_results<string::const_iterator> smatch; + typedef match_results<wstring::const_iterator> wsmatch; + + template <class BidirectionalIterator, + class Allocator = std::allocator<sub_match<BidirectionalIterator> > + class match_results + { + public: + typedef sub_match<BidirectionalIterator> value_type; + typedef const value_type& const_reference; + typedef const_reference reference; + typedef implementation defined const_iterator; + typedef const_iterator iterator; + typedef typename iterator_traits<BidirectionalIterator>::difference_type difference_type; + typedef typename Allocator::size_type size_type; + typedef Allocator allocator_type; + typedef typename iterator_traits<BidirectionalIterator>::value_type char_type; + typedef basic_string<char_type> string_type; + + // construct/copy/destroy: + ``[link boost_regex.match_results.construct explicit match_results]``(const Allocator& a = Allocator()); + ``[link boost_regex.match_results.copy_construct match_results]``(const match_results& m); + ``[link boost_regex.match_results.assign match_results& operator=]``(const match_results& m); + ~match_results(); + + // size: + size_type ``[link boost_regex.match_results.size size]``() const; + size_type ``[link boost_regex.match_results.max_size max_size]``() const; + bool ``[link boost_regex.match_results.empty empty]``() const; + // element access: + difference_type ``[link boost_regex.match_results.length length]``(int sub = 0) const; + difference_type ``[link boost_regex.match_results.length length]``(const char_type* sub) const; + template <class charT> + difference_type ``[link boost_regex.match_results.length length]``(const charT* sub) const; + template <class charT, class Traits, class A> + difference_type ``[link boost_regex.match_results.length length]``(const std::basic_string<charT, Traits, A>& sub) const; + difference_type ``[link boost_regex.match_results.position position]``(unsigned int sub = 0) const; + difference_type ``[link boost_regex.match_results.position position]``(const char_type* sub) const; + template <class charT> + difference_type ``[link boost_regex.match_results.position position]``(const charT* sub) const; + template <class charT, class Traits, class A> + difference_type ``[link boost_regex.match_results.position position]``(const std::basic_string<charT, Traits, A>& sub) const; + string_type ``[link boost_regex.match_results.str str]``(int sub = 0) const; + string_type ``[link boost_regex.match_results.str str]``(const char_type* sub)const; + template <class Traits, class A> + string_type ``[link boost_regex.match_results.str str]``(const std::basic_string<char_type, Traits, A>& sub)const; + template <class charT> + string_type ``[link boost_regex.match_results.str str]``(const charT* sub)const; + template <class charT, class Traits, class A> + string_type ``[link boost_regex.match_results.str str]``(const std::basic_string<charT, Traits, A>& sub)const; + const_reference ``[link boost_regex.match_results.subscript operator\[\]]``(int n) const; + const_reference ``[link boost_regex.match_results.subscript operator\[\]]``(const char_type* n) const; + template <class Traits, class A> + const_reference ``[link boost_regex.match_results.subscript operator\[\]]``(const std::basic_string<char_type, Traits, A>& n) const; + template <class charT> + const_reference ``[link boost_regex.match_results.subscript operator\[\]]``(const charT* n) const; + template <class charT, class Traits, class A> + const_reference ``[link boost_regex.match_results.subscript operator\[\]]``(const std::basic_string<charT, Traits, A>& n) const; + + const_reference ``[link boost_regex.match_results.prefix prefix]``() const; + + const_reference ``[link boost_regex.match_results.suffix suffix]``() const; + const_iterator ``[link boost_regex.match_results.begin begin]``() const; + const_iterator ``[link boost_regex.match_results.end end]``() const; + // format: + template <class OutputIterator, class Formatter> + OutputIterator ``[link boost_regex.match_results.format format]``(OutputIterator out, + Formatter fmt, + match_flag_type flags = format_default) const; + template <class Formatter> + string_type ``[link boost_regex.match_results.format2 format]``(Formatter fmt, + match_flag_type flags = format_default) const; + + allocator_type ``[link boost_regex.match_results.get_allocator get_allocator]``() const; + void ``[link boost_regex.match_results.swap swap]``(match_results& that); + + #ifdef BOOST_REGEX_MATCH_EXTRA + typedef typename value_type::capture_sequence_type capture_sequence_type; + const capture_sequence_type& ``[link boost_regex.match_results.captures captures]``(std::size_t i)const; + #endif + + }; + + template <class BidirectionalIterator, class Allocator> + bool ``[link boost_regex.match_results.op_eq operator ==]`` (const match_results<BidirectionalIterator, Allocator>& m1, + const match_results<BidirectionalIterator, Allocator>& m2); + template <class BidirectionalIterator, class Allocator> + bool ``[link boost_regex.match_results.op_ne operator !=]`` (const match_results<BidirectionalIterator, Allocator>& m1, + const match_results<BidirectionalIterator, Allocator>& m2); + + template <class charT, class traits, class BidirectionalIterator, class Allocator> + basic_ostream<charT, traits>& + ``[link boost_regex.match_results.op_stream operator <<]`` (basic_ostream<charT, traits>& os, + const match_results<BidirectionalIterator, Allocator>& m); + + template <class BidirectionalIterator, class Allocator> + void ``[link boost_regex.match_results.op_swap swap]``(match_results<BidirectionalIterator, Allocator>& m1, + match_results<BidirectionalIterator, Allocator>& m2); + +[h4 Description] + +In all `match_results` constructors, a copy of the Allocator argument is used +for any memory allocation performed by the constructor or member functions +during the lifetime of the object. + +[#boost_regex.match_results.construct] + + match_results(const Allocator& a = Allocator()); + +[*Effects]: Constructs an object of class `match_results`. The postconditions of +this function are indicated in the table: + +[table +[[Element][Value]] +[[empty()][true]] +[[size()][0]] +[[str()][basic_string<charT>()]] +] + + + +[#boost_regex.match_results.copy_construct] + + match_results(const match_results& m); + +[*Effects]: Constructs an object of class match_results, as a copy of m. + + +[#boost_regex.match_results.assign] + + match_results& operator=(const match_results& m); + +[*Effects]: Assigns m to *this. The postconditions of this function are +indicated in the table: + +[table +[[Element][Value]] +[[empty()][m.empty().]] +[[size()][m.size().]] +[[str(n)][m.str(n) for all integers n < m.size().]] +[[prefix()][m.prefix().]] +[[suffix()][m.suffix().]] +[[(*this)\[n\]][m\[n\] for all integers n < m.size().]] +[[length(n)][m.length(n) for all integers n < m.size().]] +[[position(n)][m.position(n) for all integers n < m.size().]] +] + +[#boost_regex.match_results.size] + + size_type size()const; + +[*Effects]: Returns the number of [sub_match] elements stored in *this; that is +the number of marked sub-expressions in the regular expression that was +matched plus one. + + +[#boost_regex.match_results.max_size] + + size_type max_size()const; + +[*Effects]: Returns the maximum number of [sub_match] elements that can be +stored in *this. + + +[#boost_regex.match_results.empty] + + bool empty()const; + +[*Effects]: Returns size() == 0. + + + +[#boost_regex.match_results.length] + + difference_type length(int sub = 0)const; + difference_type length(const char_type* sub)const; + template <class charT> + difference_type length(const charT* sub)const; + template <class charT, class Traits, class A> + difference_type length(const std::basic_string<charT, Traits, A>&)const; + + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: Returns the length of sub-expression /sub/, that is to say: +`(*this)[sub].length()`. + +The overloads that accept a string refer to a named sub-expression /n/. +In the event that there is no such named sub-expression then returns zero. + +The template overloads of this function, allow the string and\/or character type +to be different from the character type of the underlying sequence and\/or regular expression: +in this case the characters will be widened to the underlying character type of the original regular expression. +A compiler error will occur if the argument passes a wider character type than the underlying sequence. +These overloads allow a normal narrow character C string literal to be used as an argument, even when +the underlying character type of the expression being matched may be something more exotic such as a +Unicode character type. + +[#boost_regex.match_results.position] + + difference_type position(unsigned int sub = 0)const; + difference_type position(const char_type* sub)const; + template <class charT> + difference_type position(const charT* sub)const; + template <class charT, class Traits, class A> + difference_type position(const std::basic_string<charT, Traits, A>&)const; + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: Returns the starting location of sub-expression /sub/, or -1 if /sub/ was +not matched. Note that if this represents a partial match , then `position()` +will return the location of the partial match even though `(*this)[0].matched` is false. + +The overloads that accept a string refer to a named sub-expression /n/. +In the event that there is no such named sub-expression then returns -1. + +The template overloads of this function, allow the string and\/or character type +to be different from the character type of the underlying sequence and\/or regular expression: +in this case the characters will be widened to the underlying character type of the original regular expression. +A compiler error will occur if the argument passes a wider character type than the underlying sequence. +These overloads allow a normal narrow character C string literal to be used as an argument, even when +the underlying character type of the expression being matched may be something more exotic such as a +Unicode character type. + + +[#boost_regex.match_results.str] + + string_type str(int sub = 0)const; + string_type str(const char_type* sub)const; + template <class Traits, class A> + string_type str(const std::basic_string<char_type, Traits, A>& sub)const; + template <class charT> + string_type str(const charT* sub)const; + template <class charT, class Traits, class A> + string_type str(const std::basic_string<charT, Traits, A>& sub)const; + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: Returns sub-expression /sub/ as a string: `string_type((*this)[sub])`. + +The overloads that accept a string, return the string that matched the named sub-expression /n/. +In the event that there is no such named sub-expression then returns an empty string. + +The template overloads of this function, allow the string and\/or character type +to be different from the character type of the underlying sequence and\/or regular expression: +in this case the characters will be widened to the underlying character type of the original regular expression. +A compiler error will occur if the argument passes a wider character type than the underlying sequence. +These overloads allow a normal narrow character C string literal to be used as an argument, even when +the underlying character type of the expression being matched may be something more exotic such as a +Unicode character type. + + +[#boost_regex.match_results.subscript] + + const_reference operator[](int n) const; + const_reference operator[](const char_type* n) const; + template <class Traits, class A> + const_reference operator[](const std::basic_string<char_type, Traits, A>& n) const; + template <class charT> + const_reference operator[](const charT* n) const; + template <class charT, class Traits, class A> + const_reference operator[](const std::basic_string<charT, Traits, A>& n) const; + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: Returns a reference to the [sub_match] object representing the character +sequence that matched marked sub-expression /n/. If `n == 0` then returns a +reference to a [sub_match] object representing the character sequence that +matched the whole regular expression. If /n/ is out of range, or if /n/ is an +unmatched sub-expression, then returns a [sub_match] object whose matched +member is false. + +The overloads that accept a string, return a reference to the [sub_match] +object representing the character sequence that matched the named sub-expression /n/. +In the event that there is no such named sub-expression then returns a [sub_match] object whose matched +member is false. + +The template overloads of this function, allow the string and\/or character type +to be different from the character type of the underlying sequence and\/or regular expression: +in this case the characters will be widened to the underlying character type of the original regular expression. +A compiler error will occur if the argument passes a wider character type than the underlying sequence. +These overloads allow a normal narrow character C string literal to be used as an argument, even when +the underlying character type of the expression being matched may be something more exotic such as a +Unicode character type. + + +[#boost_regex.match_results.prefix] + + const_reference prefix()const; + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: Returns a reference to the [sub_match] object representing the +character sequence from the start of the string being matched or searched, to the +start of the match found. + + +[#boost_regex.match_results.suffix] + + const_reference suffix()const; + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: Returns a reference to the [sub_match] object representing the +character sequence from the end of the match found to the end of the +string being matched or searched. + + +[#boost_regex.match_results.begin] + + const_iterator begin()const; + +[*Effects]: Returns a starting iterator that enumerates over all the marked +sub-expression matches stored in *this. + + +[#boost_regex.match_results.end] + + const_iterator end()const; + +[*Effects]: Returns a terminating iterator that enumerates over all the +marked sub-expression matches stored in *this. + +[#boost_regex.match_results_format] +[#boost_regex.match_results.format] + + template <class OutputIterator, class Formatter> + OutputIterator format(OutputIterator out, + Formatter fmt, + match_flag_type flags = format_default); + +[*Requires]: The type `OutputIterator` conforms to the Output Iterator requirements +(C++ std 24.1.2). + +The type `Formatter` must be either a pointer to a null-terminated string +of type `char_type[]`, or be a container of `char_type`'s (for example +`std::basic_string<char_type>`) or be a unary, binary or ternary functor +that computes the replacement string from a function call: either +`fmt(*this)` which must return a container of `char_type`'s to be used as the +replacement text, or either `fmt(*this, out)` or `fmt(*this, out, flags)`, both of +which write the replacement text to `*out`, and then return the new +OutputIterator position. Note that if the formatter is a functor, then it is +['passed by value]: users that want to pass function objects with internal state +might want to use [@../../../../doc/html/ref.html Boost.Ref] to wrap the object so +that it's passed by reference. + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: If `fmt` is either a null-terminated string, or a +container of `char_type`'s, then copies the character sequence `[fmt.begin(), fmt.end())` to +`OutputIterator` /out/. For each format specifier or escape sequence in +/fmt/, replace that sequence with either the character(s) it represents, +or the sequence of characters within `*this` to which it refers. +The bitmasks specified in flags determines what format specifiers or +escape sequences are recognized, by default this is the format used by +ECMA-262, ECMAScript Language Specification, Chapter 15 part +5.4.11 String.prototype.replace. + +If `fmt` is a function object, then depending on the number of arguments +the function object accepts, it will either: + +* Call `fmt(*this)` and copy the string returned to `OutputIterator` +/out/. +* Call `fmt(*this, out)`. +* Call `fmt(*this, out, flags)`. + +In all cases the new position of the `OutputIterator` is returned. + +See the [link boost_regex.format format syntax guide for more information]. + +[*Returns]: out. + + +[#boost_regex.match_results.format2] + + template <class Formatter> + string_type format(Formatter fmt, + match_flag_type flags = format_default); + +[*Requires] +The type `Formatter` must be either a pointer to a null-terminated string +of type `char_type[]`, or be a container of `char_type`'s (for example +`std::basic_string<char_type>`) or be a unary, binary or ternary functor +that computes the replacement string from a function call: either +`fmt(*this)` which must return a container of `char_type`'s to be used as the +replacement text, or either `fmt(*this, out)` or `fmt(*this, out, flags)`, both of +which write the replacement text to `*out`, and then return the new +OutputIterator position. + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: +If `fmt` is either a null-terminated string, or a +container of `char_type`'s, then copies the string /fmt/: For each format specifier or +escape sequence in /fmt/, replace that sequence with either the +character(s) it represents, or the sequence of characters within `*this` to +which it refers. The bitmasks specified in flags determines what format +specifiers or escape sequences are recognized, by default this is the format +used by ECMA-262, ECMAScript Language Specification, Chapter 15 part +5.4.11 String.prototype.replace. + +If `fmt` is a function object, then depending on the number of arguments +the function object accepts, it will either: + +* Call `fmt(*this)` and return the result. +* Call `fmt(*this, unspecified-output-iterator)`, where `unspecified-output-iterator` +is an unspecified OutputIterator type used to copy the output to the string result. +* Call `fmt(*this, unspecified-output-iterator, flags)`, where `unspecified-output-iterator` +is an unspecified OutputIterator type used to copy the output to the string result. + +See the [link boost_regex.format format syntax guide for more information]. + +[#boost_regex.match_results.get_allocator] + + allocator_type get_allocator()const; + +[*Effects]: Returns a copy of the Allocator that was passed to the object's constructor. + +[#boost_regex.match_results.swap] + + void swap(match_results& that); + +[*Effects]: Swaps the contents of the two sequences. + +[*Postcondition]: *this contains the sequence of matched sub-expressions that were in that, that contains the sequence of matched sub-expressions that were in *this. + +[*Complexity]: constant time. + +[#boost_regex.match_results.capture_type] + + typedef typename value_type::capture_sequence_type capture_sequence_type; + +Defines an implementation-specific type that satisfies the requirements of +a standard library Sequence (21.1.1 including the optional Table 68 operations), +whose value_type is a `sub_match<BidirectionalIterator>`. This type happens to be +`std::vector<sub_match<BidirectionalIterator> >`, but you shouldn't actually +rely on that. + +[#boost_regex.match_results.captures] + + const capture_sequence_type& captures(std::size_t i)const; + +[*Requires]: that the match_results object has been initialized as a result of a +successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and +that the underlying iterators have not been subsequently invalidated. Will raise a +`std::logic_error` if the match_results object was not initialized. + +[*Effects]: returns a sequence containing all the captures obtained for sub-expression i. + +[*Returns]: `(*this)[i].captures();` + +[*Preconditions]: the library must be built and used with BOOST_REGEX_MATCH_EXTRA defined, +and you must pass the flag match_extra to the regex matching functions +([regex_match], [regex_search], [regex_iterator] or [regex_token_iterator]) in +order for this member function to be defined and return useful information. + +[*Rationale]: Enabling this feature has several consequences: + +* sub_match occupies more memory resulting in complex expressions running out of memory or stack space more quickly during matching. +* The matching algorithms are less efficient at handling some features (independent sub-expressions for example), even when match_extra is not used. +* The matching algorithms are much less efficient (i.e. slower), when match_extra is used. Mostly this is down to the extra memory allocations that have to take place. + +[#boost_regex.match_results.op_eq] + + template <class BidirectionalIterator, class Allocator> + bool operator == (const match_results<BidirectionalIterator, Allocator>& m1, + const match_results<BidirectionalIterator, Allocator>& m2); + +[*Effects]: Compares the two sequences for equality. + +[#boost_regex.match_results.op_ne] + + template <class BidirectionalIterator, class Allocator> + bool operator != (const match_results<BidirectionalIterator, Allocator>& m1, + const match_results<BidirectionalIterator, Allocator>& m2); + +[*Effects]: Compares the two sequences for inequality. + +[#boost_regex.match_results.op_stream] + + template <class charT, class traits, class BidirectionalIterator, class Allocator> + basic_ostream<charT, traits>& + operator << (basic_ostream<charT, traits>& os, + const match_results<BidirectionalIterator, Allocator>& m); + +[*Effects]: Writes the contents of /m/ to the stream /os/ as if by calling +`os << m.str()`; Returns /os/. + +[#boost_regex.match_results.op_swap] + + template <class BidirectionalIterator, class Allocator> + void swap(match_results<BidirectionalIterator, Allocator>& m1, + match_results<BidirectionalIterator, Allocator>& m2); + +[*Effects]: Swaps the contents of the two sequences. + +[endsect] + diff --git a/libs/regex/doc/mfc_strings.qbk b/libs/regex/doc/mfc_strings.qbk new file mode 100644 index 0000000000..8d70fec433 --- /dev/null +++ b/libs/regex/doc/mfc_strings.qbk @@ -0,0 +1,295 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:mfc_strings Using Boost Regex With MFC Strings] + +[section:mfc_intro Introduction to Boost.Regex and MFC Strings] + +The header `<boost/regex/mfc.hpp>` provides Boost.Regex support for MFC string +types: note that this support requires Visual Studio .NET (Visual C++ 7) or +later, where all of the MFC and ATL string types are based around the +CSimpleStringT class template. + +In the following documentation, whenever you see +CSimpleStringT<charT>, then you can substitute any of the following +MFC/ATL types (all of which inherit from CSimpleStringT): + + CString + CStringA + CStringW + CAtlString + CAtlStringA + CAtlStringW + CStringT<charT,traits> + CFixedStringT<charT,N> + CSimpleStringT<charT> + +[endsect] +[section:mfc_regex_types Regex Types Used With MFC Strings] + +The following typedefs are provided for the convenience of those working with +TCHAR's: + + typedef basic_regex<TCHAR> tregex; + typedef match_results<TCHAR const*> tmatch; + typedef regex_iterator<TCHAR const*> tregex_iterator; + typedef regex_token_iterator<TCHAR const*> tregex_token_iterator; + +If you are working with explicitly narrow or wide characters rather than +TCHAR, then use the regular Boost.Regex types `regex` and `wregex` instead. + +[endsect] +[section:mfc_regex_create Regular Expression Creation From an MFC String] + +The following helper function is available to assist in the creation of a +regular expression from an MFC/ATL string type: + + template <class charT> + basic_regex<charT> + make_regex(const ATL::CSimpleStringT<charT>& s, + ::boost::regex_constants::syntax_option_type f = boost::regex_constants::normal); + +[*Effects]: returns `basic_regex<charT>(s.GetString(), s.GetString() + s.GetLength(), f);` + +[endsect] +[section:mfc_algo Overloaded Algorithms For MFC String Types] + +For each regular expression algorithm that's overloaded for a `std::basic_string` +argument, there is also one overloaded for the MFC/ATL string types. These +algorithm signatures all look a lot more complex than they actually are, +but for completeness here they are anyway: + +[h4 regex_match] + +There are two overloads, the first reports what matched in a match_results +structure, the second does not. + +All the usual caveats for [regex_match] apply, in particular the algorithm +will only report a successful match if all of the input text matches the +expression, if this isn't what you want then use [regex_search] instead. + + template <class charT, class T, class A> + bool regex_match( + const ATL::CSimpleStringT<charT>& s, + match_results<const B*, A>& what, + const basic_regex<charT, T>& e, + boost::regex_constants::match_flag_type f = boost::regex_constants::match_default); + +[*Effects]: returns `::boost::regex_match(s.GetString(), s.GetString() + s.GetLength(), what, e, f);` + +[*Example:] + + // + // Extract filename part of a path from a CString and return the result + // as another CString: + // + CString get_filename(const CString& path) + { + boost::tregex r(__T("(?:\\A|.*\\\\)([^\\\\]+)")); + boost::tmatch what; + if(boost::regex_match(path, what, r)) + { + // extract $1 as a CString: + return CString(what[1].first, what.length(1)); + } + else + { + throw std::runtime_error("Invalid pathname"); + } + } + +[h4 regex_match (second overload)] + + template <class charT, class T> + bool regex_match( + const ATL::CSimpleStringT<charT>& s, + const basic_regex<B, T>& e, + boost::regex_constants::match_flag_type f = boost::regex_constants::match_default) + +[*Effects]: returns `::boost::regex_match(s.GetString(), s.GetString() + s.GetLength(), e, f);` + +[*Example:] + + // + // Find out if *password* meets our password requirements, + // as defined by the regular expression *requirements*. + // + bool is_valid_password(const CString& password, const CString& requirements) + { + return boost::regex_match(password, boost::make_regex(requirements)); + } + +[h4 regex_search] + +There are two additional overloads for [regex_search], the first reports what +matched the second does not: + + template <class charT, class A, class T> + bool regex_search(const ATL::CSimpleStringT<charT>& s, + match_results<const charT*, A>& what, + const basic_regex<charT, T>& e, + boost::regex_constants::match_flag_type f = boost::regex_constants::match_default) + +[*Effects]: returns ::boost::regex_search(s.GetString(), s.GetString() + s.GetLength(), what, e, f); + +[*Example]: Postcode extraction from an address string. + + CString extract_postcode(const CString& address) + { + // searches throw address for a UK postcode and returns the result, + // the expression used is by Phil A. on www.regxlib.com: + boost::tregex r(__T("^(([A-Z]{1,2}[0-9]{1,2})|([A-Z]{1,2}[0-9][A-Z]))\\s?([0-9][A-Z]{2})$")); + boost::tmatch what; + if(boost::regex_search(address, what, r)) + { + // extract $0 as a CString: + return CString(what[0].first, what.length()); + } + else + { + throw std::runtime_error("No postcode found"); + } + } + +[h4 regex_search (second overload)] + + template <class charT, class T> + inline bool regex_search(const ATL::CSimpleStringT<charT>& s, + const basic_regex<charT, T>& e, + boost::regex_constants::match_flag_type f = boost::regex_constants::match_default) + +[*Effects]: returns `::boost::regex_search(s.GetString(), s.GetString() + s.GetLength(), e, f);` + +[h4 regex_replace] + +There are two additional overloads for [regex_replace], the first sends output +to an output iterator, while the second creates a new string + + template <class OutputIterator, class BidirectionalIterator, class traits, class + charT> + OutputIterator regex_replace(OutputIterator out, + BidirectionalIterator first, + BidirectionalIterator last, + const basic_regex<charT, traits>& e, + const ATL::CSimpleStringT<charT>& fmt, + match_flag_type flags = match_default) + +[*Effects]: returns `::boost::regex_replace(out, first, last, e, fmt.GetString(), flags);` + + template <class traits, charT> + ATL::CSimpleStringT<charT> regex_replace(const ATL::CSimpleStringT<charT>& s, + const basic_regex<charT, traits>& e, + const ATL::CSimpleStringT<charT>& fmt, + match_flag_type flags = match_default) + +[*Effects]: returns a new string created using [regex_replace], and the same +memory manager as string /s/. + +[*Example]: + + // + // Take a credit card number as a string of digits, + // and reformat it as a human readable string with "-" + // separating each group of four digits: + // + const boost::tregex e(__T("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z")); + const CString human_format = __T("$1-$2-$3-$4"); + + CString human_readable_card_number(const CString& s) + { + return boost::regex_replace(s, e, human_format); + } + +[endsect] +[section:mfc_iter Iterating Over the Matches Within An MFC String] + +The following helper functions are provided to ease the conversion from an +MFC/ATL string to a [regex_iterator] or [regex_token_iterator]: + +[h4 regex_iterator creation helper] + + template <class charT> + regex_iterator<charT const*> + make_regex_iterator( + const ATL::CSimpleStringT<charT>& s, + const basic_regex<charT>& e, + ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default); + +[*Effects]: returns `regex_iterator(s.GetString(), s.GetString() + s.GetLength(), e, f);` + +[*Example]: + + void enumerate_links(const CString& html) + { + // enumerate and print all the links in some HTML text, + // the expression used is by Andew Lee on www.regxlib.com: + boost::tregex r( + __T("href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+" + "(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*" + "(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']")); + boost::tregex_iterator i(boost::make_regex_iterator(html, r)), j; + while(i != j) + { + std::cout << (*i)[1] << std::endl; + ++i; + } + } + + +[h4 regex_token_iterator creation helpers] + + template <class charT> + regex_token_iterator<charT const*> + make_regex_token_iterator( + const ATL::CSimpleStringT<charT>& s, + const basic_regex<charT>& e, + int sub = 0, + ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default); + +[*Effects]: returns `regex_token_iterator(s.GetString(), s.GetString() + s.GetLength(), e, sub, f);` + + template <class charT> + regex_token_iterator<charT const*> + make_regex_token_iterator( + const ATL::CSimpleStringT<charT>& s, + const basic_regex<charT>& e, + const std::vector<int>& subs, + ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default); + +[*Effects]: returns `regex_token_iterator(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);` + + template <class charT, std::size_t N> + regex_token_iterator<charT const*> + make_regex_token_iterator( + const ATL::CSimpleStringT<charT>& s, + const basic_regex<charT>& e, + const int (& subs)[N], + ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default); + +[*Effects]: returns `regex_token_iterator(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);` + +[*Example]: + + void enumerate_links2(const CString& html) + { + // enumerate and print all the links in some HTML text, + // the expression used is by Andew Lee on www.regxlib.com: + boost::tregex r( + __T("href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+" + "(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*" + "(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']")); + boost::tregex_token_iterator i(boost::make_regex_token_iterator(html, r, 1)), j; + while(i != j) + { + std::cout << *i << std::endl; + ++i; + } + } + +[endsect] +[endsect] + diff --git a/libs/regex/doc/non_std_strings.qbk b/libs/regex/doc/non_std_strings.qbk new file mode 100644 index 0000000000..63851a77b5 --- /dev/null +++ b/libs/regex/doc/non_std_strings.qbk @@ -0,0 +1,30 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:non_std_strings Interfacing With Non-Standard String Types] + +The Boost.Regex algorithms and iterators are all iterator-based, +with convenience overloads of the algorithms provided that convert +standard library string types to iterator pairs internally. If you want +to search a non-standard string type then the trick is to convert that string +into an iterator pair: so far I haven't come across any string types that +can't be handled this way, even if they're not officially iterator based. +Certainly any string type that provides access to it's internal buffer, along +with it's length, can be converted into a pair of pointers (which can be +used as iterators). + +Some non-standard string types are sufficiently common that wappers have been +provided for them already: currently this includes the ICU and MFC string class +types. + +[include icu_strings.qbk] +[include mfc_strings.qbk] + +[endsect] + + + diff --git a/libs/regex/doc/old_regex.qbk b/libs/regex/doc/old_regex.qbk new file mode 100644 index 0000000000..7e1e1ca841 --- /dev/null +++ b/libs/regex/doc/old_regex.qbk @@ -0,0 +1,283 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:old_regex High Level Class RegEx (Deprecated)] + +The high level wrapper class RegEx is now deprecated and does not form +part of the regular expression standardization proposal. This type still +exists, and existing code will continue to compile, however the following +documentation is unlikely to be further updated. + + #include <boost/cregex.hpp> + +The class RegEx provides a high level simplified interface to the regular +expression library, this class only handles narrow character strings, and +regular expressions always follow the "normal" syntax - that is the +same as the perl / ECMAScript synatx. + + typedef bool (*GrepCallback)(const RegEx& expression); + typedef bool (*GrepFileCallback)(const char* file, const RegEx& expression); + typedef bool (*FindFilesCallback)(const char* file); + + class RegEx + { + public: + RegEx(); + RegEx(const RegEx& o); + ~RegEx(); + RegEx(const char* c, bool icase = false); + explicit RegEx(const std::string& s, bool icase = false); + RegEx& operator=(const RegEx& o); + RegEx& operator=(const char* p); + RegEx& operator=(const std::string& s); + unsigned int SetExpression(const char* p, bool icase = false); + unsigned int SetExpression(const std::string& s, bool icase = false); + std::string Expression()const; + // + // now matching operators: + // + bool Match(const char* p, boost::match_flag_type flags = match_default); + bool Match(const std::string& s, boost::match_flag_type flags = match_default); + bool Search(const char* p, boost::match_flag_type flags = match_default); + bool Search(const std::string& s, boost::match_flag_type flags = match_default); + unsigned int Grep(GrepCallback cb, const char* p, + boost::match_flag_type flags = match_default); + unsigned int Grep(GrepCallback cb, const std::string& s, + boost::match_flag_type flags = match_default); + unsigned int Grep(std::vector<std::string>& v, const char* p, + boost::match_flag_type flags = match_default); + unsigned int Grep(std::vector<std::string>& v, const std::string& s, + boost::match_flag_type flags = match_default); + unsigned int Grep(std::vector<unsigned int>& v, const char* p, + boost::match_flag_type flags = match_default); + unsigned int Grep(std::vector<unsigned int>& v, const std::string& s, + boost::match_flag_type flags = match_default); + unsigned int GrepFiles(GrepFileCallback cb, const char* files, bool recurse = false, + boost::match_flag_type flags = match_default); + unsigned int GrepFiles(GrepFileCallback cb, const std::string& files, + bool recurse = false, + boost::match_flag_type flags = match_default); + unsigned int FindFiles(FindFilesCallback cb, const char* files, + bool recurse = false, + boost::match_flag_type flags = match_default); + unsigned int FindFiles(FindFilesCallback cb, const std::string& files, + bool recurse = false, + boost::match_flag_type flags = match_default); + std::string Merge(const std::string& in, const std::string& fmt, + bool copy = true, boost::match_flag_type flags = match_default); + std::string Merge(const char* in, const char* fmt, bool copy = true, + boost::match_flag_type flags = match_default); + unsigned Split(std::vector<std::string>& v, std::string& s, + boost::match_flag_type flags = match_default, + unsigned max_count = ~0); + // + // now operators for returning what matched in more detail: + // + unsigned int Position(int i = 0)const; + unsigned int Length(int i = 0)const; + bool Matched(int i = 0)const; + unsigned int Line()const; + unsigned int Marks() const; + std::string What(int i)const; + std::string operator[](int i)const ; + + static const unsigned int npos; + }; + +Member functions for class RegEx are defined as follows: + +[table +[[Member][Description]] +[[`RegEx();`][Default constructor, constructs an instance of RegEx without any valid expression. ]] +[[`RegEx(const RegEx& o);`][Copy constructor, all the properties of parameter /o/ + are copied. ]] +[[`RegEx(const char* c, bool icase = false);`][Constructs an instance of RegEx, + setting the expression to /c/, if /icase/ is true then matching is + insensitive to case, otherwise it is sensitive to case. Throws + [bad_expression] on failure. ]] +[[`RegEx(const std::string& s, bool icase = false);`][Constructs an instance of + RegEx, setting the expression to /s/, if /icase/ is true then matching + is insensitive to case, otherwise it is sensitive to case. Throws + [bad_expression] on failure. ]] +[[`RegEx& operator=(const RegEx& o);`][Default assignment operator. ]] +[[`RegEx& operator=(const char* p);`][Assignment operator, equivalent to calling + `SetExpression(p, false)`. Throws [bad_expression] on failure. ]] +[[`RegEx& operator=(const std::string& s);`][Assignment operator, equivalent to + calling `SetExpression(s, false)`. Throws [bad_expression] on failure. ]] +[[`unsigned int SetExpression(constchar* p, bool icase = false);`][Sets the + current expression to /p/, if /icase/ is true then matching is + insensitive to case, otherwise it is sensitive to case. + Throws [bad_expression] on failure. ]] +[[`unsigned int SetExpression(const std::string& s, bool icase = false);`] + [Sets the current expression to /s/, if /icase/ is true then matching is + insensitive to case, otherwise it is sensitive to case. Throws + [bad_expression] on failure. ]] +[[`std::string Expression()const;`][Returns a copy of the current regular expression. ]] +[[`bool Match(const char* p, boost::match_flag_type flags = match_default);`] + [Attempts to match the current expression against the text /p/ using + the match flags /flags/ - see [match_flag_type]. Returns /true/ if the + expression matches the whole of the input string. ]] +[[`bool Match(const std::string& s, boost::match_flag_type flags = match_default);`] + [Attempts to match the current expression against the text /s/ using + the [match_flag_type] /flags/. Returns /true/ if the expression matches + the whole of the input string. ]] +[[`bool Search(const char* p, boost::match_flag_type flags = match_default);`] + [Attempts to find a match for the current expression somewhere in + the text /p/ using the [match_flag_type] /flags/. Returns /true/ + if the match succeeds. ]] +[[`bool Search(const std::string& s, boost::match_flag_type flags = match_default);`] + [Attempts to find a match for the current expression somewhere in the + text /s/ using the [match_flag_type] flags. Returns /true/ if the + match succeeds. ]] +[[`unsigned int Grep(GrepCallback cb, const char* p, boost::match_flag_type flags = match_default);`] + [Finds all matches of the current expression in the text /p/ using the + [match_flag_type] /flags/. For each match found calls the call-back + function cb as: `cb(*this);` + If at any stage the call-back function returns /false/ then the grep + operation terminates, otherwise continues until no further matches + are found. Returns the number of matches found.]] +[[`unsigned int Grep(GrepCallback cb, const std::string& s, boost::match_flag_type flags = match_default);`] + [Finds all matches of the current expression in the text /s/ using the + [match_flag_type] flags. For each match found calls the call-back + function cb as: `cb(*this);` + If at any stage the call-back function returns false then the grep operation + terminates, otherwise continues until no further matches are found. + Returns the number of matches found.]] +[[`unsigned int Grep(std::vector<std::string>& v, const char* p, boost::match_flag_type flags = match_default);`] + [Finds all matches of the current expression in the text /p/ using the + [match_flag_type] flags. For each match pushes a copy of what matched + onto /v/. Returns the number of matches found. ]] +[[`unsigned int Grep(std::vector<std::string>& v, const std::string& s, boost::match_flag_type flags = match_default);`] + [Finds all matches of the current expression in the text /s/ using the + [match_flag_type] /flags/. For each match pushes a copy of what + matched onto /v/. Returns the number of matches found. ]] +[[`unsigned int Grep(std::vector<unsigned int>& v, const char* p, boost::match_flag_type flags = match_default);`] + [Finds all matches of the current expression in the text /p/ using the + [match_flag_type] /flags/. For each match pushes the starting index of + what matched onto /v/. Returns the number of matches found. ]] +[[`unsigned int Grep(std::vector<unsigned int>& v, const std::string& s, boost::match_flag_type flags = match_default);`] + [Finds all matches of the current expression in the text /s/ using the + [match_flag_type] /flags/. For each match pushes the starting index of what + matched onto /v/. Returns the number of matches found. ]] +[[`unsigned int GrepFiles(GrepFileCallback cb, const char* files, bool recurse = false, boost::match_flag_type flags = match_default);`] + [Finds all matches of the current expression in the files files using + the [match_flag_type] /flags/. For each match calls the call-back function cb. + If the call-back returns false then the algorithm returns without + considering further matches in the current file, or any further files. + + The parameter /files/ can include wild card characters '\*' and '\?', if + the parameter recurse is true then searches sub-directories for matching + file names. + + Returns the total number of matches found. + + May throw an exception derived from `std::runtime_error` if file io fails.]] +[[`unsigned int GrepFiles(GrepFileCallback cb, const std::string& files, bool recurse = false, boost::match_flag_type flags = match_default);`] + [Finds all matches of the current expression in the files files using the + [match_flag_type] /flags/. For each match calls the call-back function cb. + + If the call-back returns false then the algorithm returns without + considering further matches in the current file, or any further files. + + The parameter /files/ can include wild card characters '\*' and '\?', if + the parameter recurse is true then searches sub-directories for + matching file names. + + Returns the total number of matches found. + + May throw an exception derived from `std::runtime_error` if file io fails.]] + +[[`unsigned int FindFiles(FindFilesCallback cb, const char* files, bool recurse = false, boost::match_flag_type flags = match_default);`] + [Searches files to find all those which contain at least one match of + the current expression using the [match_flag_type] /flags/. For each + matching file calls the call-back function cb. + If the call-back returns false then the algorithm returns without + considering any further files. + + The parameter /files/ can include wild card characters '\*' and '\?', if + the parameter /recurse/ is true then searches sub-directories for + matching file names. + + Returns the total number of files found. + + May throw an exception derived from `std::runtime_error` if file io fails.]] +[[`unsigned int FindFiles(FindFilesCallback cb, const std::string& files, bool recurse = false, boost::match_flag_type flags = match_default);`] + [Searches files to find all those which contain at least one + match of the current expression using the [match_flag_type] /flags/. + For each matching file calls the call-back function cb. + + If the call-back returns false then the algorithm returns without + considering any further files. + + The parameter /files/ can include wild card characters '\*' and '\?', if + the parameter /recurse/ is true then searches sub-directories for + matching file names. + + Returns the total number of files found. + + May throw an exception derived from `std::runtime_error` if file io fails.]] + +[[`std::string Merge(const std::string& in, const std::string& fmt, bool copy = true, boost::match_flag_type flags = match_default);`] + [Performs a search and replace operation: searches through the + string /in/ for all occurrences of the current expression, for each + occurrence replaces the match with the format string /fmt/. Uses /flags/ + to determine what gets matched, and how the format string should be + treated. If /copy/ is true then all unmatched sections of input are + copied unchanged to output, if the flag /format_first_only/ is set then + only the first occurance of the pattern found is replaced. + Returns the new string. See also + [link boost_regex.format format string syntax], and [match_flag_type].]] +[[`std::string Merge(const char* in, const char* fmt, bool copy = true, boost::match_flag_type flags = match_default);`] + [Performs a search and replace operation: searches through the string /in/ + for all occurrences of the current expression, for each occurrence + replaces the match with the format string /fmt/. Uses /flags/ to determine + what gets matched, and how the format string should be treated. + If /copy/ is true then all unmatched sections of input are copied + unchanged to output, if the flag /format_first_only/ is set then only + the first occurance of the pattern found is replaced. Returns + the new string. See also [link boost_regex.format format string syntax], and [match_flag_type].]] +[[`unsigned Split(std::vector<std::string>& v, std::string& s, boost::match_flag_type flags = match_default, unsigned max_count = ~0);`] + [Splits the input string and pushes each one onto the vector. + If the expression contains no marked sub-expressions, then one + string is outputted for each section of the input that does not + match the expression. If the expression does contain marked + sub-expressions, then outputs one string for each marked + sub-expression each time a match occurs. Outputs no more than + /max_count/ strings. Before returning, deletes from the input string + /s/ all of the input that has been processed (all of the string if + /max_count/ was not reached). Returns the number of strings pushed + onto the vector. ]] +[[`unsigned int Position(int i = 0)const;`] + [Returns the position of what matched sub-expression /i/. If `i = 0` + then returns the position of the whole match. Returns `RegEx::npos` if + the supplied index is invalid, or if the specified sub-expression + did not participate in the match. ]] +[[`unsigned int Length(int i = 0)const;`] + [Returns the length of what matched sub-expression i. If `i = 0` then + returns the length of the whole match. Returns `RegEx::npos` if the + supplied index is invalid, or if the specified sub-expression did not + participate in the match. ]] +[[`bool Matched(int i = 0)const;`] + [Returns true if sub-expression /i/ was matched, false otherwise. ]] +[[`unsigned int Line()const;`][Returns the line on which the match occurred, + indexes start from 1 not zero, if no match occurred then returns `RegEx::npos`. ]] +[[`unsigned int Marks() const;`][Returns the number of marked sub-expressions + contained in the expression. Note that this includes the whole + match (sub-expression zero), so the value returned is always >= 1. ]] +[[`std::string What(int i)const;`] + [Returns a copy of what matched sub-expression /i/. If `i = 0` then + returns a copy of the whole match. Returns a null string if the + index is invalid or if the specified sub-expression did not + participate in a match. ]] +[[`std::string operator[](int i)const ;`][Returns `what(i);` + Can be used to simplify access to sub-expression matches, and make + usage more perl-like.]] +] + +[endsect] + diff --git a/libs/regex/doc/partial_matches.qbk b/libs/regex/doc/partial_matches.qbk new file mode 100644 index 0000000000..65801b2c93 --- /dev/null +++ b/libs/regex/doc/partial_matches.qbk @@ -0,0 +1,149 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:partial_matches Partial Matches] + +The [match_flag_type] `match_partial` can be passed to the following algorithms: +[regex_match], [regex_search], and [regex_grep], and used with the +iterator [regex_iterator]. When used it indicates that partial as +well as full matches should be found. A partial match is one that +matched one or more characters at the end of the text input, but +did not match all of the regular expression (although it may have done +so had more input been available). Partial matches are typically used +when either validating data input (checking each character as it is +entered on the keyboard), or when searching texts that are either too long +to load into memory (or even into a memory mapped file), or are of +indeterminate length (for example the source may be a socket or similar). +Partial and full matches can be differentiated as shown in the following +table (the variable M represents an instance of [match_results] as filled in +by [regex_match], [regex_search] or [regex_grep]): + +[table +[[ ][Result][M\[0\].matched][M\[0\].first][M\[0\].second]] +[[No match][False][Undefined][Undefined][Undefined]] +[[Partial match][True][False][Start of partial match.][End of partial match (end of text).]] +[[Full match][True][True][Start of full match.][End of full match.]] +] + +Be aware that using partial matches can sometimes result in somewhat +imperfect behavior: + +* There are some expressions, such as ".\*abc" that will always produce a partial match. This problem can be reduced by careful construction of the regular expressions used, or by setting flags like match_not_dot_newline so that expressions like .\* can't match past line boundaries. +* Boost.Regex currently prefers leftmost matches to full matches, so for example matching "abc|b" against "ab" produces a partial match against the "ab" rather than a full match against "b". It's more efficient to work this way, but may not be the behavior you want in all situations. + +The following example tests to see whether the text could be a valid +credit card number, as the user presses a key, the character entered +would be added to the string being built up, and passed to `is_possible_card_number`. +If this returns true then the text could be a valid card number, so the +user interface's OK button would be enabled. If it returns false, then +this is not yet a valid card number, but could be with more input, so +the user interface would disable the OK button. Finally, if the procedure +throws an exception the input could never become a valid number, and the +inputted character must be discarded, and a suitable error indication +displayed to the user. + + #include <string> + #include <iostream> + #include <boost/regex.hpp> + + boost::regex e("(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})"); + + bool is_possible_card_number(const std::string& input) + { + // + // return false for partial match, true for full match, or throw for + // impossible match based on what we have so far... + boost::match_results<std::string::const_iterator> what; + if(0 == boost::regex_match(input, what, e, boost::match_default | boost::match_partial)) + { + // the input so far could not possibly be valid so reject it: + throw std::runtime_error( + "Invalid data entered - this could not possibly be a valid card number"); + } + // OK so far so good, but have we finished? + if(what[0].matched) + { + // excellent, we have a result: + return true; + } + // what we have so far is only a partial match... + return false; + } + +In the following example, text input is taken from a stream containing an +unknown amount of text; this example simply counts the number of html tags +encountered in the stream. The text is loaded into a buffer and searched a +part at a time, if a partial match was encountered, then the partial match +gets searched a second time as the start of the next batch of text: + + #include <iostream> + #include <fstream> + #include <sstream> + #include <string> + #include <boost/regex.hpp> + + // match some kind of html tag: + boost::regex e("<[^>]*>"); + // count how many: + unsigned int tags = 0; + + void search(std::istream& is) + { + // buffer we'll be searching in: + char buf[4096]; + // saved position of end of partial match: + const char* next_pos = buf + sizeof(buf); + // flag to indicate whether there is more input to come: + bool have_more = true; + + while(have_more) + { + // how much do we copy forward from last try: + unsigned leftover = (buf + sizeof(buf)) - next_pos; + // and how much is left to fill: + unsigned size = next_pos - buf; + // copy forward whatever we have left: + std::memmove(buf, next_pos, leftover); + // fill the rest from the stream: + is.read(buf + leftover, size); + unsigned read = is.gcount(); + // check to see if we've run out of text: + have_more = read == size; + // reset next_pos: + next_pos = buf + sizeof(buf); + // and then iterate: + boost::cregex_iterator a( + buf, + buf + read + leftover, + e, + boost::match_default | boost::match_partial); + boost::cregex_iterator b; + + while(a != b) + { + if((*a)[0].matched == false) + { + // Partial match, save position and break: + next_pos = (*a)[0].first; + break; + } + else + { + // full match: + ++tags; + } + + // move to next match: + ++a; + } + } + } + +[endsect] + + + diff --git a/libs/regex/doc/performance.qbk b/libs/regex/doc/performance.qbk new file mode 100644 index 0000000000..47d7277949 --- /dev/null +++ b/libs/regex/doc/performance.qbk @@ -0,0 +1,23 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:performance Performance] + +The performance of Boost.Regex in both recursive and non-recursive modes +should be broadly comparable to other regular expression libraries: +recursive mode is slightly faster (especially where memory allocation requires +thread synchronisation), but not by much. The following pages compare +Boost.Regex with various other regular expression libraries for the +following compilers: + +* [@../vc71-performance.html Visual Studio.Net 2003 (recursive Boost.Regex implementation)]. +* [@../gcc-performance.html Gcc 3.2 (cygwin) (non-recursive Boost.Regex implementation)]. + +[endsect] + + + diff --git a/libs/regex/doc/posix_api.qbk b/libs/regex/doc/posix_api.qbk new file mode 100644 index 0000000000..beffa46473 --- /dev/null +++ b/libs/regex/doc/posix_api.qbk @@ -0,0 +1,142 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:posix POSIX Compatible C API's] + +[note this is an abridged reference to the POSIX API functions, these are provided +for compatibility with other libraries, rather than as an API to be used +in new code (unless you need access from a language other than C++). +This version of these functions should also happily coexist with other versions, +as the names used are macros that expand to the actual function names.] + + #include <boost/cregex.hpp> + +or: + + #include <boost/regex.h> + +The following functions are available for users who need a POSIX compatible +C library, they are available in both Unicode and narrow character versions, +the standard POSIX API names are macros that expand to one version or the +other depending upon whether UNICODE is defined or not. + +[important Note that all the symbols defined here are enclosed inside namespace +`boost` when used in C++ programs, unless you use `#include <boost/regex.h>` +instead - in which case the symbols are still defined in namespace boost, but +are made available in the global namespace as well.] + +The functions are defined as: + + extern "C" { + + struct regex_tA; + struct regex_tW; + + int regcompA(regex_tA*, const char*, int); + unsigned int regerrorA(int, const regex_tA*, char*, unsigned int); + int regexecA(const regex_tA*, const char*, unsigned int, regmatch_t*, int); + void regfreeA(regex_tA*); + + int regcompW(regex_tW*, const wchar_t*, int); + unsigned int regerrorW(int, const regex_tW*, wchar_t*, unsigned int); + int regexecW(const regex_tW*, const wchar_t*, unsigned int, regmatch_t*, int); + void regfreeW(regex_tW*); + + #ifdef UNICODE + #define regcomp regcompW + #define regerror regerrorW + #define regexec regexecW + #define regfree regfreeW + #define regex_t regex_tW + #else + #define regcomp regcompA + #define regerror regerrorA + #define regexec regexecA + #define regfree regfreeA + #define regex_t regex_tA + #endif + } + +All the functions operate on structure regex_t, which exposes two public members: + +[table +[[Member][Meaning]] +[[`unsigned int re_nsub`][This is filled in by `regcomp` and indicates the number of sub-expressions contained in the regular expression.]] +[[`const TCHAR* re_endp`][Points to the end of the expression to compile when the flag REG_PEND is set.]] +] + +[note `regex_t` is actually a `#define` - it is either `regex_tA` or `regex_tW` +depending upon whether `UNICODE` is defined or not, `TCHAR` is either `char` +or `wchar_t` again depending upon the macro `UNICODE`.] + +[#regcomp][h4 regcomp] + +`regcomp` takes a pointer to a `regex_t`, a pointer to the expression to +compile and a flags parameter which can be a combination of: + +[table +[[Flag][Meaning]] +[[REG_EXTENDED][Compiles modern regular expressions. Equivalent to `regbase::char_classes | regbase::intervals | regbase::bk_refs`. ]] +[[REG_BASIC][Compiles basic (obsolete) regular expression syntax. Equivalent to `regbase::char_classes | regbase::intervals | regbase::limited_ops | regbase::bk_braces | regbase::bk_parens | regbase::bk_refs`. ]] +[[REG_NOSPEC][All characters are ordinary, the expression is a literal string. ]] +[[REG_ICASE][Compiles for matching that ignores character case. ]] +[[REG_NOSUB][Has no effect in this library. ]] +[[REG_NEWLINE][When this flag is set a dot does not match the newline character. ]] +[[REG_PEND][When this flag is set the re_endp parameter of the regex_t structure must point to the end of the regular expression to compile. ]] +[[REG_NOCOLLATE][When this flag is set then locale dependent collation for character ranges is turned off. ]] +[[REG_ESCAPE_IN_LISTS][When this flag is set, then escape sequences are permitted in bracket expressions (character sets). ]] +[[REG_NEWLINE_ALT ][When this flag is set then the newline character is equivalent to the alternation operator |. ]] +[[REG_PERL][Compiles Perl like regular expressions. ]] +[[REG_AWK][A shortcut for awk-like behavior: `REG_EXTENDED | REG_ESCAPE_IN_LISTS` ]] +[[REG_GREP][A shortcut for grep like behavior: `REG_BASIC | REG_NEWLINE_ALT` ]] +[[REG_EGREP][A shortcut for egrep like behavior: `REG_EXTENDED | REG_NEWLINE_ALT` ]] +] + +[#regerror][h4 regerror] + +regerror takes the following parameters, it maps an error code to a human +readable string: + +[table +[[Parameter][Meaning]] +[[int code][The error code. ]] +[[const regex_t* e][The regular expression (can be null). ]] +[[char* buf][The buffer to fill in with the error message. ]] +[[unsigned int buf_size][The length of buf. ]] +] + +If the error code is OR'ed with REG_ITOA then the message that results is the +printable name of the code rather than a message, for example "REG_BADPAT". +If the code is REG_ATIO then e must not be null and e->re_pend must point +to the printable name of an error code, the return value is then the value +of the error code. For any other value of code, the return value is the +number of characters in the error message, if the return value is greater than +or equal to buf_size then regerror will have to be called again with a larger buffer. + +[#regexec][h4 regexec] + +regexec finds the first occurrence of expression e within string buf. +If len is non-zero then /*m/ is filled in with what matched the regular +expression, m[0] contains what matched the whole string, m[1] the +first sub-expression etc, see regmatch_t in the header file declaration +for more details. The eflags parameter can be a combination of: + +[table +[[Flag][Meaning]] +[[REG_NOTBOL][Parameter buf does not represent the start of a line. ]] +[[REG_NOTEOL][Parameter buf does not terminate at the end of a line. ]] +[[REG_STARTEND][The string searched starts at buf + pmatch\[0\].rm_so and ends at buf + pmatch\[0\].rm_eo. ]] +] + +[#regfree][h4 regfree] + +`regfree` frees all the memory that was allocated by regcomp. + +[endsect] + + + diff --git a/libs/regex/doc/redistributables.qbk b/libs/regex/doc/redistributables.qbk new file mode 100644 index 0000000000..c310ff6711 --- /dev/null +++ b/libs/regex/doc/redistributables.qbk @@ -0,0 +1,28 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:redist Redistributables] + +If you are using Microsoft or Borland C++ and link to a dll version of the +run time library, then you can choose to also link to a dll version of Boost.Regex +by defining the symbol BOOST_REGEX_DYN_LINK when you compile your code. +While these dll's are redistributable, there are no "standard" versions, +so when installing on the users PC, you should place these in a +directory private to your application, and not in the PC's directory path. +Note that if you link to a static version of your run time library, then +you will also link to a static version of Boost.Regex and no dll's will +need to be distributed. The possible Boost.Regex dll and library names are +computed according to the formula given in +[@../../../../more/getting_started.html the getting started guide]. + +Note: you can disable automatic library selection by defining the +symbol BOOST_REGEX_NO_LIB when compiling, this is useful if you want to +build Boost.Regex yourself in your IDE, or if you need to debug Boost.Regex. + +[endsect] + diff --git a/libs/regex/doc/regex.qbk b/libs/regex/doc/regex.qbk new file mode 100644 index 0000000000..dab951e017 --- /dev/null +++ b/libs/regex/doc/regex.qbk @@ -0,0 +1,109 @@ + +[article Boost.Regex + [quickbook 1.3] + [copyright 1998-2010 John Maddock] + [license + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + [@http://www.boost.org/LICENSE_1_0.txt]) + ] + [authors [Maddock, John]] + [/last-revision $Date: 2011-08-23 04:47:38 -0400 (Tue, 23 Aug 2011) $] +] + +[template super[x]'''<superscript>'''[x]'''</superscript>'''] +[template sub[x]'''<subscript>'''[x]'''</subscript>'''] + + +[template tr1[] [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf Technical Report on C++ Library Extensions]] +[template syntax_option_type[] [link boost_regex.ref.syntax_option_type `syntax_option_type`]] +[template error_type[] [link boost_regex.ref.error_type `error_type`]] +[template bad_expression[] [link boost_regex.ref.bad_expression `bad_expression`]] +[template regex_error[] [link boost_regex.ref.bad_expression `regex_error`]] +[template basic_regex[] [link boost_regex.ref.basic_regex `basic_regex`]] +[template match_results[] [link boost_regex.ref.match_results `match_results`]] +[template sub_match[] [link boost_regex.ref.sub_match `sub_match`]] +[template match_flag_type[] [link boost_regex.ref.match_flag_type `match_flag_type`]] +[template regex_iterator[] [link boost_regex.ref.regex_iterator `regex_iterator`]] +[template regex_token_iterator[] [link boost_regex.ref.regex_token_iterator `regex_token_iterator`]] +[template regex_search[] [link boost_regex.ref.regex_search `regex_search`]] +[template regex_match[] [link boost_regex.ref.regex_match `regex_match`]] +[template regex_replace[] [link boost_regex.ref.regex_replace `regex_replace`]] +[template regex_grep[] [link boost_regex.ref.deprecated_interfaces.regex_grep `regex_grep`]] +[template regex_split[] [link boost_regex.ref.deprecated_interfaces.regex_split `regex_split`]] +[template match_results_format[] [link boost_regex.match_results_format `match_results<>::format`]] +[template perl_format[] [link boost_regex.format.perl_format Perl]] +[template sed_format[] [link boost_regex.format.sed_format Sed]] +[template boost_extended_format[] [link boost_regex.format.boost_format_syntax Boost-Extended]] + +[/depricated stuff:] +[template RegEx[] [link boost_regex.ref.deprecated_interfaces.old_regex `RegEx`]] +[template regcomp[] [link boost_regex.ref.posix.regcomp `regcomp`]] +[template regexec[] [link boost_regex.ref.posix.regexec `regexec`]] +[template regerror[] [link boost_regex.ref.posix.regerror `regerror`]] +[template regfree[] [link boost_regex.ref.posix.regfree `regfree`]] + +A printer-friendly +[@http://sourceforge.net/projects/boost/files/boost-docs/ +PDF version of this manual is also available]. + +[include configuration.qbk] +[include install.qbk] +[include introduction.qbk] +[include unicode.qbk] +[include captures.qbk] +[include partial_matches.qbk] + +[include syntax.qbk] + +[include format_syntax.qbk] + +[section:ref Reference] + +[include basic_regex.qbk] +[include match_result.qbk] +[include sub_match.qbk] +[include regex_match.qbk] +[include regex_search.qbk] +[include regex_replace.qbk] +[include regex_iterator.qbk] +[include regex_token_iterator.qbk] +[include bad_expression.qbk] +[include syntax_option_type.qbk] +[include match_flag_type.qbk] +[include error_type.qbk] +[include regex_traits.qbk] + +[include non_std_strings.qbk] +[include posix_api.qbk] +[include concepts.qbk] + +[section Deprecated Interfaces] +[include regex_format.qbk] +[include regex_grep.qbk] +[include regex_split.qbk] +[include old_regex.qbk] +[endsect] + +[section Internal Details] +[include unicode_iterators.qbk] +[endsect] + +[endsect] + +[section Background Information] + +[include headers.qbk] +[include locale.qbk] +[include thread_safety.qbk] +[include examples.qbk] +[include further_info.qbk] +[include faq.qbk] +[include performance.qbk] +[include standards.qbk] +[include redistributables.qbk] +[include acknowledgements.qbk] +[include history.qbk] + +[endsect] + diff --git a/libs/regex/doc/regex_format.qbk b/libs/regex/doc/regex_format.qbk new file mode 100644 index 0000000000..d9e249ba36 --- /dev/null +++ b/libs/regex/doc/regex_format.qbk @@ -0,0 +1,59 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_format regex_format (Deprecated)] + +The algorithm `regex_format` is deprecated; new code should use +[match_results_format] instead. Existing code will continue to compile, +the following documentation is taken from the previous version of Boost.Regex and +will not be further updated: + +[h4 Algorithm regex_format] + + #include <boost/regex.hpp> + +The algorithm `regex_format` takes the results of a match and creates a +new string based upon a format string, `regex_format` can be used for +search and replace operations: + + template <class OutputIterator, class iterator, class Allocator, class Formatter> + OutputIterator regex_format(OutputIterator out, + const match_results<iterator, Allocator>& m, + Formatter fmt, + match_flag_type flags = 0); + +The library also defines the following convenience variation of +`regex_format`, which returns the result directly as a string, rather +than outputting to an iterator. + +[note This version may not be available, or may be available in a more limited +form, depending upon your compilers capabilities] + + template <class iterator, class Allocator, class Formatter> + std::basic_string<charT> regex_format + (const match_results<iterator, Allocator>& m, + Formatter fmt, + match_flag_type flags = 0); + +Parameters to the main version of the function are passed as follows: + +[table +[[Parameter][Description]] +[[`OutputIterator out`][An output iterator type, the output string is sent to this iterator. Typically this would be a std::ostream_iterator. ]] +[[`const match_results<iterator, Allocator>& m`][An instance of [match_results] obtained from one of the matching algorithms above, and denoting what matched. ]] +[[`Formatter fmt`][Either a format string that determines how the match is transformed into the new string, or a functor that computes the new string from /m/ - see [match_results_format]. ]] +[[`unsigned flags`][Optional flags which describe how the format string is to be interpreted. ]] +] + +Format flags are described under [match_flag_type]. + +The format string syntax (and available options) is described more fully +under [link boost_regex.format format strings]. + +[endsect] + diff --git a/libs/regex/doc/regex_grep.qbk b/libs/regex/doc/regex_grep.qbk new file mode 100644 index 0000000000..7d47a401ee --- /dev/null +++ b/libs/regex/doc/regex_grep.qbk @@ -0,0 +1,320 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_grep regex_grep (Deprecated)] + +The algorithm `regex_grep` is deprecated in favor of [regex_iterator] +which provides a more convenient and standard library friendly interface. + +The following documentation is taken unchanged from the previous boost +release, and will not be updated in future. + + #include <boost/regex.hpp> + +`regex_grep` allows you to search through a bidirectional-iterator range and +locate all the (non-overlapping) matches with a given regular expression. +The function is declared as: + + template <class Predicate, class iterator, class charT, class traits> + unsigned int regex_grep(Predicate foo, + iterator first, + iterator last, + const basic_regex<charT, traits>& e, + boost::match_flag_type flags = match_default) + +The library also defines the following convenience versions, which take +either a `const charT*`, or a `const std::basic_string<>&` in place of a +pair of iterators. + + template <class Predicate, class charT, class traits> + unsigned int regex_grep(Predicate foo, + const charT* str, + const basic_regex<charT, traits>& e, + boost::match_flag_type flags = match_default); + + template <class Predicate, class ST, class SA, class charT, class traits> + unsigned int regex_grep(Predicate foo, + const std::basic_string<charT, ST, SA>& s, + const basic_regex<charT, traits>& e, + boost::match_flag_type flags = match_default); + +The parameters for the primary version of `regex_grep` have the following meanings: + +foo: A predicate function object or function pointer, see below for more information. + +first: The start of the range to search. + +last: The end of the range to search. + +e: The regular expression to search for. + +flags: The flags that determine how matching is carried out, one of the match_flags enumerators. + + +The algorithm finds all of the non-overlapping matches of the expression /e/, +for each match it fills a `match_results<iterator>` structure, which +contains information on what matched, and calls the predicate /foo/, passing the +`match_results<iterator>` as a single argument. If the predicate returns +/true/, then the grep operation continues, otherwise it terminates +without searching for further matches. The function returns the number +of matches found. + +The general form of the predicate is: + + struct grep_predicate + { + bool operator()(const match_results<iterator_type>& m); + }; + +For example the regular expression "a\*b" would find one match in the string +"aaaaab" and two in the string "aaabb". + +Remember this algorithm can be used for a lot more than implementing a +version of grep, the predicate can be and do anything that you want, +grep utilities would output the results to the screen, another program could +index a file based on a regular expression and store a set of bookmarks in a list, +or a text file conversion utility would output to file. The results of one +`regex_grep` can even be chained into another `regex_grep` to create recursive parsers. + +The algorithm may throw `std::runtime_error` if the complexity of matching the +expression against an /N/ character string begins to exceed O(N[super 2]), or +if the program runs out of stack space while matching the expression +(if Boost.Regex is configured in recursive mode), or if the matcher +exhausts it's permitted memory allocation (if Boost.Regex is configured in +non-recursive mode). + +Example: convert the example from [regex_search] to use `regex_grep` instead: + + #include <string> + #include <map> + #include <boost/regex.hpp> + + // IndexClasses: + // takes the contents of a file in the form of a string + // and searches for all the C++ class definitions, storing + // their locations in a map of strings/int's + typedef std::map<std::string, int, std::less<std::string> > map_type; + + const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + + boost::regex expression(re); + class IndexClassesPred + { + map_type& m; + std::string::const_iterator base; + public: + IndexClassesPred(map_type& a, std::string::const_iterator b) : m(a), base(b) {} + bool operator()(const smatch& what) + { + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + m[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - base; + return true; + } + }; + void IndexClasses(map_type& m, const std::string& file) + { + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + regex_grep(IndexClassesPred(m, start), start, end, expression); + } + +Example: Use `regex_grep` to call a global callback function: + + #include <string> + #include <map> + #include <boost/regex.hpp> + + // purpose: + // takes the contents of a file in the form of a string + // and searches for all the C++ class definitions, storing + // their locations in a map of strings/int's + typedef std::map<std::string, int, std::less<std::string> > map_type; + + const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + + boost::regex expression(re); + map_type class_index; + std::string::const_iterator base; + + bool grep_callback(const boost::smatch& what) + { + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + class_index[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - base; + return true; + } + void IndexClasses(const std::string& file) + { + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + base = start; + regex_grep(grep_callback, start, end, expression, match_default); + } + + +Example: use `regex_grep` to call a class member function, use the standard +library adapters `std::mem_fun` and `std::bind1st` to convert the member +function into a predicate: + + #include <string> + #include <map> + #include <boost/regex.hpp> + #include <functional> + // purpose: + // takes the contents of a file in the form of a string + // and searches for all the C++ class definitions, storing + // their locations in a map of strings/int's + + typedef std::map<std::string, int, std::less<std::string> > map_type; + class class_index + { + boost::regex expression; + map_type index; + std::string::const_iterator base; + bool grep_callback(boost::smatch what); + public: + void IndexClasses(const std::string& file); + class_index() + : index(), + expression("^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + "(class|struct)[[:space:]]*(\\<\\w+\\>([[:blank:]]*\\([^)]*\\))?" + "[[:space:]]*)*(\\<\\w*\\>)[[:space:]]*(<[^;:{]+>[[:space:]]*)?" + "(\\{|:[^;\\{()]*\\{)" + ){} + }; + bool class_index::grep_callback(boost::smatch what) + { + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + index[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - base; + return true; + } + + void class_index::IndexClasses(const std::string& file) + { + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + base = start; + regex_grep(std::bind1st(std::mem_fun(&class_index::grep_callback), this), + start, + end, + expression); + } + + +Finally, C++ Builder users can use C++ Builder's closure type as a callback argument: + + #include <string> + #include <map> + #include <boost/regex.hpp> + #include <functional> + // purpose: + // takes the contents of a file in the form of a string + // and searches for all the C++ class definitions, storing + // their locations in a map of strings/int's + + typedef std::map<std::string, int, std::less<std::string> > map_type; + class class_index + { + boost::regex expression; + map_type index; + std::string::const_iterator base; + typedef boost::smatch arg_type; + bool grep_callback(const arg_type& what); + public: + typedef bool (__closure* grep_callback_type)(const arg_type&); + void IndexClasses(const std::string& file); + class_index() + : index(), + expression("^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + "(class|struct)[[:space:]]*(\\<\\w+\\>([[:blank:]]*\\([^)]*\\))?" + "[[:space:]]*)*(\\<\\w*\\>)[[:space:]]*(<[^;:{]+>[[:space:]]*)?" + "(\\{|:[^;\\{()]*\\{)" + ){} + }; + + bool class_index::grep_callback(const arg_type& what) + { + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + index[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - base; + return true; + } + + void class_index::IndexClasses(const std::string& file) + { + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + base = start; + class_index::grep_callback_type cl = &(this->grep_callback); + regex_grep(cl, + start, + end, + expression); + } + + +[endsect] + diff --git a/libs/regex/doc/regex_iterator.qbk b/libs/regex/doc/regex_iterator.qbk new file mode 100644 index 0000000000..9789bcae37 --- /dev/null +++ b/libs/regex/doc/regex_iterator.qbk @@ -0,0 +1,307 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_iterator regex_iterator] + +The iterator type [regex_iterator] will enumerate all of the regular expression +matches found in some sequence: dereferencing a [regex_iterator] yields a +reference to a [match_results] object. + + template <class BidirectionalIterator, + class charT = iterator_traits<BidirectionalIterator>::value_type, + class traits = regex_traits<charT> > + class regex_iterator + { + public: + typedef basic_regex<charT, traits> regex_type; + typedef match_results<BidirectionalIterator> value_type; + typedef typename iterator_traits<BidirectionalIterator>::difference_type difference_type; + typedef const value_type* pointer; + typedef const value_type& reference; + typedef std::forward_iterator_tag iterator_category; + + ``[link boost_regex.regex_iterator.construct1 regex_iterator]``(); + ``[link boost_regex.regex_iterator.construct2 regex_iterator]``(BidirectionalIterator a, BidirectionalIterator b, + const regex_type& re, + match_flag_type m = match_default); + ``[link boost_regex.regex_iterator.construct3 regex_iterator]``(const regex_iterator&); + regex_iterator& ``[link boost_regex.regex_iterator.assign operator=(]``const regex_iterator&); + bool ``[link boost_regex.regex_iterator.op_eq operator==]``(const regex_iterator&)const; + bool ``[link boost_regex.regex_iterator.op_ne operator!=]``(const regex_iterator&)const; + const value_type& ``[link boost_regex.regex_iterator.op_deref operator*]``()const; + const value_type* ``[link boost_regex.regex_iterator.op_arrow operator->]``()const; + regex_iterator& ``[link boost_regex.regex_iterator.op_inc operator++]``(); + regex_iterator ``[link boost_regex.regex_iterator.op_inc2 operator++]``(int); + }; + + typedef regex_iterator<const char*> cregex_iterator; + typedef regex_iterator<std::string::const_iterator> sregex_iterator; + + #ifndef BOOST_NO_WREGEX + typedef regex_iterator<const wchar_t*> wcregex_iterator; + typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator; + #endif + + template <class charT, class traits> regex_iterator<const charT*, charT, traits> + ``[link boost_regex.regex_iterator.make make_regex_iterator]``(const charT* p, const basic_regex<charT, traits>& e, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, class ST, class SA> + regex_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> + ``[link boost_regex.regex_iterator.make make_regex_iterator]``(const std::basic_string<charT, ST, SA>& p, + const basic_regex<charT, traits>& e, + regex_constants::match_flag_type m = regex_constants::match_default); + + +[h4 Description] + +A [regex_iterator] is constructed from a pair of iterators, and enumerates +all occurrences of a regular expression within that iterator range. + +[#boost_regex.regex_iterator.construct1] + + regex_iterator(); + +[*Effects]: constructs an end of sequence [regex_iterator]. + +[#boost_regex.regex_iterator.construct2] + + regex_iterator(BidirectionalIterator a, BidirectionalIterator b, + const regex_type& re, + match_flag_type m = match_default); + +[*Effects]: constructs a [regex_iterator] that will enumerate all occurrences of +the expression /re/, within the sequence \[a,b), and found using [match_flag_type] /m/. +The object /re/ must exist for the lifetime of the [regex_iterator]. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the program +runs out of stack space while matching the expression (if Boost.Regex is +configured in recursive mode), or if the matcher exhausts its permitted +memory allocation (if Boost.Regex is configured in non-recursive mode). + +[#boost_regex.regex_iterator.construct3] + + regex_iterator(const regex_iterator& that); + +[*Effects]: constructs a copy of `that`. + +[*Postconditions]: `*this == that`. + + +[#boost_regex.regex_iterator.assign] + + regex_iterator& operator=(const regex_iterator&); + +[*Effects]: sets `*this` equal to those in `that`. + +[*Postconditions]: *this == that. + + +[#boost_regex.regex_iterator.op_eq] + + bool operator==(const regex_iterator& that)const; + +[*Effects]: returns true if *this is equal to that. + + +[#boost_regex.regex_iterator.op_ne] + + bool operator!=(const regex_iterator&)const; + +[*Effects]: returns `!(*this == that)`. + + +[#boost_regex.regex_iterator.op_deref] + + const value_type& operator*()const; + +[*Effects]: dereferencing a [regex_iterator] object it yields a const reference +to a [match_results] object, whose members are set as follows: + +[table +[[Element][Value]] +[[`(*it).size()`][`re.mark_count()`]] +[[`(*it).empty()`][`false`]] +[[`(*it).prefix().first`][The end of the last match found, or the start + of the underlying sequence if this is the first match enumerated]] +[[`(*it).prefix().last`][The same as the start of the match found: + `(*it)[0].first`]] +[[`(*it).prefix().matched`][True if the prefix did not match an empty string: + `(*it).prefix().first != (*it).prefix().second`]] +[[`(*it).suffix().first`][The same as the end of the match found: + `(*it)[0].second`]] +[[`(*it).suffix().last`][The end of the underlying sequence.]] +[[`(*it).suffix().matched`][True if the suffix did not match an empty string: + `(*it).suffix().first != (*it).suffix().second`]] +[[`(*it)[0].first`][The start of the sequence of characters that matched the regular expression]] +[[`(*it)[0].second`][The end of the sequence of characters that matched the regular expression]] +[[`(*it)[0].matched`][true if a full match was found, and false if it was a partial match (found as a result of the match_partial flag being set).]] +[[`(*it)[n].first`][For all integers `n < (*it).size()`, the start of the sequence + that matched sub-expression /n/. Alternatively, if sub-expression /n/ + did not participate in the match, then last.]] +[[`(*it)[n].second`][For all integers `n < (*it).size()`, the end of the sequence + that matched sub-expression /n/. Alternatively, if sub-expression /n/ did + not participate in the match, then last.]] +[[`(*it)[n].matched`][For all integers `n < (*it).size()`, true if sub-expression /n/ + participated in the match, false otherwise.]] +[[`(*it).position(n)`][For all integers `n < (*it).size()`, then the distance from + the start of the underlying sequence to the start of sub-expression match /n/.]] +] + + +[#boost_regex.regex_iterator.op_arrow] + + const value_type* operator->()const; + +[*Effects]: returns `&(*this)`. + + +[#boost_regex.regex_iterator.op_inc] + + regex_iterator& operator++(); + +[*Effects]: moves the iterator to the next match in the underlying sequence, or +the end of sequence iterator if none if found. When the last match found +matched a zero length string, then the [regex_iterator] will find the next match as +follows: if there exists a non-zero length match that starts at the same +location as the last one, then returns it, otherwise starts looking for the +next (possibly zero length) match from one position to the right of the last match. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the +program runs out of stack space while matching the expression (if Boost.Regex is +configured in recursive mode), or if the matcher exhausts its permitted +memory allocation (if Boost.Regex is configured in non-recursive mode). + +[*Returns]: *this. + + +[#boost_regex.regex_iterator.op_inc2] + + regex_iterator operator++(int); + +[*Effects]: constructs a copy result of `*this`, then calls `++(*this)`. + +[*Returns]: result. + +[#boost_regex.regex_iterator.make] + + template <class charT, class traits> + regex_iterator<const charT*, charT, traits> + make_regex_iterator(const charT* p, const basic_regex<charT, traits>& e, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, class ST, class SA> + regex_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> + make_regex_iterator(const std::basic_string<charT, ST, SA>& p, + const basic_regex<charT, traits>& e, + regex_constants::match_flag_type m = regex_constants::match_default); + +[*Effects]: returns an iterator that enumerates all occurences of expression /e/ +in text /p/ using [match_flag_type] /m/. + +[h4 Examples] + +The following example takes a C++ source file and builds up an index of class +names, and the location of that class in the file. + + #include <string> + #include <map> + #include <fstream> + #include <iostream> + #include <boost/regex.hpp> + + using namespace std; + + // purpose: + // takes the contents of a file in the form of a string + // and searches for all the C++ class definitions, storing + // their locations in a map of strings/int's + + typedef std::map<std::string, std::string::difference_type, std::less<std::string> > map_type; + + const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + + + boost::regex expression(re); + map_type class_index; + + bool regex_callback(const boost::match_results<std::string::const_iterator>& what) + { + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + class_index[what[5].str() + what[6].str()] = what.position(5); + return true; + } + + void load_file(std::string& s, std::istream& is) + { + s.erase(); + s.reserve(is.rdbuf()->in_avail()); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } + } + + int main(int argc, const char** argv) + { + std::string text; + for(int i = 1; i < argc; ++i) + { + cout << "Processing file " << argv[i] << endl; + std::ifstream fs(argv[i]); + load_file(text, fs); + // construct our iterators: + boost::sregex_iterator m1(text.begin(), text.end(), expression); + boost::sregex_iterator m2; + std::for_each(m1, m2, ®ex_callback); + // copy results: + cout << class_index.size() << " matches found" << endl; + map_type::iterator c, d; + c = class_index.begin(); + d = class_index.end(); + while(c != d) + { + cout << "class \"" << (*c).first << "\" found at index: " << (*c).second << endl; + ++c; + } + class_index.erase(class_index.begin(), class_index.end()); + } + return 0; + } + + +[endsect] + diff --git a/libs/regex/doc/regex_match.qbk b/libs/regex/doc/regex_match.qbk new file mode 100644 index 0000000000..55856c4180 --- /dev/null +++ b/libs/regex/doc/regex_match.qbk @@ -0,0 +1,184 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_match regex_match] + + #include <boost/regex.hpp> + +The algorithm [regex_match] determines whether a given regular expression +matches [*all] of a given character sequence denoted by a pair of +bidirectional-iterators, the algorithm is defined as follows, +the main use of this function is data input validation. + +[important Note that the result is true only if the expression matches the +*whole* of the input sequence. If you want to search for an +expression somewhere within the sequence then use [regex_search]. If you +want to match a prefix of the character string then use [regex_search] +with the flag match_continuous set.] + + template <class BidirectionalIterator, class Allocator, class charT, class traits> + bool regex_match(BidirectionalIterator first, BidirectionalIterator last, + match_results<BidirectionalIterator, Allocator>& m, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + + template <class BidirectionalIterator, class charT, class traits> + bool regex_match(BidirectionalIterator first, BidirectionalIterator last, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + + template <class charT, class Allocator, class traits> + bool regex_match(const charT* str, match_results<const charT*, Allocator>& m, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + + template <class ST, class SA, class Allocator, class charT, class traits> + bool regex_match(const basic_string<charT, ST, SA>& s, + match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + + template <class charT, class traits> + bool regex_match(const charT* str, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + + template <class ST, class SA, class charT, class traits> + bool regex_match(const basic_string<charT, ST, SA>& s, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + +[h4 Description] + + template <class BidirectionalIterator, class Allocator, class charT, class traits> + bool regex_match(BidirectionalIterator first, BidirectionalIterator last, + match_results<BidirectionalIterator, Allocator>& m, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + +[*Requires]: Type BidirectionalIterator meets the requirements of a +Bidirectional Iterator (24.1.4). + +[*Effects]: Determines whether there is an exact match between the regular expression /e/, +and all of the character sequence \[first, last), parameter /flags/ +(see [match_flag_type]) is used to +control how the expression is matched against the character sequence. +Returns true if such a match exists, false otherwise. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the +program runs out of stack space while matching the expression (if Boost.Regex is +configured in recursive mode), or if the matcher exhausts its permitted +memory allocation (if Boost.Regex is configured in non-recursive mode). + +[*Postconditions]: If the function returns false, then the effect on +parameter /m/ is undefined, otherwise the effects on parameter /m/ are +given in the table: + +[table +[[Element][Value]] +[[`m.size()`][`e.mark_count()`]] +[[`m.empty()`][`false`]] +[[`m.prefix().first`][`first`]] +[[`m.prefix().last`][`first`]] +[[`m.prefix().matched`][`false`]] +[[`m.suffix().first`][`last`]] +[[`m.suffix().last`][`last`]] +[[`m.suffix().matched`][`false`]] +[[`m[0].first`][`first`]] +[[`m[0].second`][`last`]] +[[`m[0].matched`][true if a full match was found, and false if it was a +partial match (found as a result of the match_partial flag being set).]] +[[`m[n].first`][For all integers `n < m.size()`, the start of the sequence that + matched sub-expression /n/. Alternatively, if sub-expression /n/ did not + participate in the match, then `last`.]] +[[`m[n].second`][For all integers `n < m.size()`, the end of the sequence that + matched sub-expression /n/. Alternatively, if sub-expression /n/ did not + participate in the match, then `last`.]] +[[`m[n].matched`][For all integers `n < m.size()`, true if sub-expression /n/ + participated in the match, false otherwise.]] +] + + + template <class BidirectionalIterator, class charT, class traits> + bool regex_match(BidirectionalIterator first, BidirectionalIterator last, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Behaves "as if" by constructing an instance of +`match_results<BidirectionalIterator> what`, and then returning the result of +`regex_match(first, last, what, e, flags)`. + + template <class charT, class Allocator, class traits> + bool regex_match(const charT* str, match_results<const charT*, Allocator>& m, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Returns the result of `regex_match(str, str + char_traits<charT>::length(str), m, e, flags)`. + + template <class ST, class SA, class Allocator, + class charT, class traits> + bool regex_match(const basic_string<charT, ST, SA>& s, + match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Returns the result of `regex_match(s.begin(), s.end(), m, e, flags)`. + + template <class charT, class traits> + bool regex_match(const charT* str, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Returns the result of `regex_match(str, str + char_traits<charT>::length(str), e, flags)`. + + template <class ST, class SA, class charT, class traits> + bool regex_match(const basic_string<charT, ST, SA>& s, + const basic_regex <charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Returns the result of `regex_match(s.begin(), s.end(), e, flags)`. + +[h4 Examples] + +The following example processes an ftp response: + + #include <stdlib.h> + #include <boost/regex.hpp> + #include <string> + #include <iostream> + + using namespace boost; + + regex expression("([0-9]+)(\\-| |$)(.*)"); + + // process_ftp: + // on success returns the ftp response code, and fills + // msg with the ftp response message. + int process_ftp(const char* response, std::string* msg) + { + cmatch what; + if(regex_match(response, what, expression)) + { + // what[0] contains the whole string + // what[1] contains the response code + // what[2] contains the separator character + // what[3] contains the text message. + if(msg) + msg->assign(what[3].first, what[3].second); + return std::atoi(what[1].first); + } + // failure did not match + if(msg) + msg->erase(); + return -1; + } + + +[endsect] + diff --git a/libs/regex/doc/regex_replace.qbk b/libs/regex/doc/regex_replace.qbk new file mode 100644 index 0000000000..43e0760f44 --- /dev/null +++ b/libs/regex/doc/regex_replace.qbk @@ -0,0 +1,264 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_replace regex_replace] + + #include <boost/regex.hpp> + +The algorithm [regex_replace] searches through a string finding all the +matches to the regular expression: for each match it then calls +[match_results_format] to format the string and sends the result to the +output iterator. Sections of text that do not match are copied to the +output unchanged only if the /flags/ parameter does not have the +flag `format_no_copy` set. If the flag `format_first_only` is set then +only the first occurrence is replaced rather than all occurrences. + + template <class OutputIterator, class BidirectionalIterator, class traits, class Formatter> + OutputIterator regex_replace(OutputIterator out, + BidirectionalIterator first, + BidirectionalIterator last, + const basic_regex<charT, traits>& e, + Formatter fmt, + match_flag_type flags = match_default); + + template <class traits, class Formatter> + basic_string<charT> regex_replace(const basic_string<charT>& s, + const basic_regex<charT, traits>& e, + Formatter fmt, + match_flag_type flags = match_default); + + +[h4 Description] + + template <class OutputIterator, class BidirectionalIterator, class traits, class Formatter> + OutputIterator regex_replace(OutputIterator out, + BidirectionalIterator first, + BidirectionalIterator last, + const basic_regex<charT, traits>& e, + Formatter fmt, + match_flag_type flags = match_default); + +Enumerates all the occurences of expression /e/ in the sequence \[first, last), +replacing each occurence with the string that results by merging the +match found with the format string /fmt/, and copies the resulting string to /out/. +In the case that /fmt/ is a unary, binary or ternary function object, then the +character sequence generated by that object is copied unchanged to the output when performing +a substitution. + +If the flag `format_no_copy` is set in /flags/ then unmatched sections of +text are not copied to output. + +If the flag `format_first_only` is set in flags then only the first +occurence of /e/ is replaced. + +The manner in which the format string /fmt/ is interpretted, along with the +rules used for finding matches, are determined by the flags set in /flags/: +see [match_flag_type]. + +[*Requires] +The type `Formatter` must be either a pointer to a null-terminated string +of type `char_type[]`, or be a container of `char_type`'s (for example +`std::basic_string<char_type>`) or be a unary, binary or ternary functor +that computes the replacement string from a function call: either +`fmt(what)` which must return a container of `char_type`'s to be used as the +replacement text, or either `fmt(what, out)` or `fmt(what, out, flags)`, both of +which write the replacement text to `*out`, and then return the new +OutputIterator position. In each case `what` is the [match_results] object +that represents the match found. Note that if the formatter is a functor, then it is +['passed by value]: users that want to pass function objects with internal state +might want to use [@../../../../doc/html/ref.html Boost.Ref] to wrap the object so +that it's passed by reference. + +[*Effects]: Constructs an [regex_iterator] object: + + regex_iterator<BidirectionalIterator, charT, traits, Allocator> + i(first, last, e, flags), + +and uses /i/ to enumerate through all of the matches /m/ of type +[match_results] `<BidirectionalIterator>` that occur within the sequence +\[first, last). + +If no such matches are found and + + !(flags & format_no_copy) + +then calls + + std::copy(first, last, out). + +Otherwise, for each match found, if + + !(flags & format_no_copy) + +calls + + std::copy(m.prefix().first, m.prefix().last, out), + +and then calls + + m.format(out, fmt, flags). + +Finally if + + !(flags & format_no_copy) + +calls + + std::copy(last_m.suffix().first, last_m,suffix().last, out) + +where /last_m/ is a copy of the last match found. + +If `flags & format_first_only` is non-zero then only the first match found +is replaced. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the +program runs out of stack space while matching the expression (if Boost.Regex is +configured in recursive mode), or if the matcher exhausts its permitted +memory allocation (if Boost.Regex is configured in non-recursive mode). + +[*Returns]: out. + + template <class traits, class Formatter> + basic_string<charT> regex_replace(const basic_string<charT>& s, + const basic_regex<charT, traits>& e, + Formatter fmt, + match_flag_type flags = match_default); + +[*Requires] +The type `Formatter` must be either a pointer to a null-terminated string +of type `char_type[]`, or be a container of `char_type`'s (for example +`std::basic_string<char_type>`) or be a unary, binary or ternary functor +that computes the replacement string from a function call: either +`fmt(what)` which must return a container of `char_type`'s to be used as the +replacement text, or either `fmt(what, out)` or `fmt(what, out, flags)`, both of +which write the replacement text to `*out`, and then return the new +OutputIterator position. In each case `what` is the [match_results] object +that represents the match found. + +[*Effects]: Constructs an object `basic_string<charT> result`, calls +`regex_replace(back_inserter(result), s.begin(), s.end(), e, fmt, flags)`, +and then returns `result`. + +[h4 Examples] + +The following example takes C/C++ source code as input, and outputs +syntax highlighted HTML code. + + #include <fstream> + #include <sstream> + #include <string> + #include <iterator> + #include <boost/regex.hpp> + #include <fstream> + #include <iostream> + + // purpose: + // takes the contents of a file and transform to + // syntax highlighted code in html format + + boost::regex e1, e2; + extern const char* expression_text; + extern const char* format_string; + extern const char* pre_expression; + extern const char* pre_format; + extern const char* header_text; + extern const char* footer_text; + + void load_file(std::string& s, std::istream& is) + { + s.erase(); + s.reserve(is.rdbuf()->in_avail()); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } + } + + int main(int argc, const char** argv) + { + try{ + e1.assign(expression_text); + e2.assign(pre_expression); + for(int i = 1; i < argc; ++i) + { + std::cout << "Processing file " << argv[i] << std::endl; + std::ifstream fs(argv[i]); + std::string in; + load_file(in, fs); + std::string out_name(std::string(argv[i]) + std::string(".htm")); + std::ofstream os(out_name.c_str()); + os << header_text; + // strip '<' and '>' first by outputting to a + // temporary string stream + std::ostringstream t(std::ios::out | std::ios::binary); + std::ostream_iterator<char, char> oi(t); + boost::regex_replace(oi, in.begin(), in.end(), + e2, pre_format, boost::match_default | boost::format_all); + // then output to final output stream + // adding syntax highlighting: + std::string s(t.str()); + std::ostream_iterator<char, char> out(os); + boost::regex_replace(out, s.begin(), s.end(), + e1, format_string, boost::match_default | boost::format_all); + os << footer_text; + } + } + catch(...) + { return -1; } + return 0; + } + + extern const char* pre_expression = "(<)|(>)|(&)|\\r"; + extern const char* pre_format = "(?1<)(?2>)(?3&)"; + + + const char* expression_text = + // preprocessor directives: index 1 + "(^[[:blank:]]*#(?:[^\\\\\\n]|\\\\[^\\n[:punct:][:word:]]*[\\n[:punct:][:word:]])*)|" + // comment: index 2 + "(//[^\\n]*|/\\*.*?\\*/)|" + // literals: index 3 + "\\<([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\\.)?[[:digit:]]+" + "(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\\>|" + // string literals: index 4 + "('(?:[^\\\\']|\\\\.)*'|\"(?:[^\\\\\"]|\\\\.)*\")|" + // keywords: index 5 + "\\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import" + "|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall" + "|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool" + "|break|case|catch|cdecl|char|class|const|const_cast|continue|default|delete" + "|do|double|dynamic_cast|else|enum|explicit|extern|false|float|for|friend|goto" + "|if|inline|int|long|mutable|namespace|new|operator|pascal|private|protected" + "|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_cast" + "|struct|switch|template|this|throw|true|try|typedef|typeid|typename|union|unsigned" + "|using|virtual|void|volatile|wchar_t|while)\\>" + ; + + const char* format_string = "(?1<font color=\"#008040\">$&</font>)" + "(?2<I><font color=\"#000080\">$&</font></I>)" + "(?3<font color=\"#0000A0\">$&</font>)" + "(?4<font color=\"#0000FF\">$&</font>)" + "(?5<B>$&</B>)"; + + const char* header_text = + "<HTML>\n<HEAD>\n" + "<TITLE>Auto-generated html formated source</TITLE>\n" + "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1252\">\n" + "</HEAD>\n" + "<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n" + "<P> </P>\n<PRE>"; + + const char* footer_text = "</PRE>\n</BODY>\n\n"; + + +[endsect] + diff --git a/libs/regex/doc/regex_search.qbk b/libs/regex/doc/regex_search.qbk new file mode 100644 index 0000000000..3b712d0c00 --- /dev/null +++ b/libs/regex/doc/regex_search.qbk @@ -0,0 +1,193 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_search regex_search] + + #include <boost/regex.hpp> + +The algorithm [regex_search] will search a range denoted by a pair of +bidirectional-iterators for a given regular expression. The algorithm +uses various heuristics to reduce the search time by only checking +for a match if a match could conceivably start at that position. The +algorithm is defined as follows: + + template <class BidirectionalIterator, + class Allocator, class charT, class traits> + bool regex_search(BidirectionalIterator first, BidirectionalIterator last, + match_results<BidirectionalIterator, Allocator>& m, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + + template <class ST, class SA, + class Allocator, class charT, class traits> + bool regex_search(const basic_string<charT, ST, SA>& s, + match_results< + typename basic_string<charT, ST,SA>::const_iterator, + Allocator>& m, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + + template<class charT, class Allocator, class traits> + bool regex_search(const charT* str, + match_results<const charT*, Allocator>& m, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + + template <class BidirectionalIterator, class charT, class traits> + bool regex_search(BidirectionalIterator first, BidirectionalIterator last, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + + template <class charT, class traits> + bool regex_search(const charT* str, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + + template<class ST, class SA, class charT, class traits> + bool regex_search(const basic_string<charT, ST, SA>& s, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + +[h4 Description] + + template <class BidirectionalIterator, class Allocator, class charT, class traits> + bool regex_search(BidirectionalIterator first, BidirectionalIterator last, + match_results<BidirectionalIterator, Allocator>& m, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + +[*Requires]: Type BidirectionalIterator meets the requirements of a Bidirectional Iterator (24.1.4). + +[*Effects]: Determines whether there is some sub-sequence within \[first,last) +that matches the regular expression /e/, parameter /flags/ is used to control +how the expression is matched against the character sequence. Returns +true if such a sequence exists, false otherwise. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the +program runs out of stack space while matching the expression (if Boost.Regex is +configured in recursive mode), or if the matcher exhausts its permitted +memory allocation (if Boost.Regex is configured in non-recursive mode). + +[*Postconditions]: If the function returns false, then the effect on +parameter /m/ is undefined, otherwise the effects on parameter /m/ +are given in the table: + +[table +[[Element][Value]] +[[`m.size()`][`e.mark_count()`]] +[[`m.empty()`][`false`]] +[[`m.prefix().first`][`first`]] +[[`m.prefix().last`][`m[0].first`]] +[[`m.prefix().matched`][`m.prefix().first != m.prefix().second`]] +[[`m.suffix().first`][`m[0].second`]] +[[`m.suffix().last`][`last`]] +[[`m.suffix().matched`][`m.suffix().first != m.suffix().second`]] +[[`m[0].first`][The start of the sequence of characters that matched the regular expression]] +[[`m[0].second`][The end of the sequence of characters that matched the regular expression]] +[[`m[0].matched`][true if a full match was found, and false if it was a partial match (found as a result of the match_partial flag being set).]] +[[`m[n].first`][For all integers `n < m.size()`, the start of the sequence that + matched sub-expression /n/. Alternatively, if sub-expression /n/ did not + participate in the match, then last.]] +[[`m[n].second`][For all integers `n < m.size()`, the end of the sequence that + matched sub-expression /n/. Alternatively, if sub-expression /n/ did not + participate in the match, then `last`.]] +[[`m[n].matched`][For all integers `n < m.size()`, true if sub-expression /n/ + participated in the match, false otherwise.]] +] + + template <class charT, class Allocator, class traits> + bool regex_search(const charT* str, match_results<const charT*, Allocator>& m, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Returns the result of `regex_search(str, str + char_traits<charT>::length(str), m, e, flags)`. + + template <class ST, class SA, class Allocator, class charT, + class traits> + bool regex_search(const basic_string<charT, ST, SA>& s, + match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Returns the result of `regex_search(s.begin(), s.end(), m, e, flags)`. + + template <class iterator, class charT, class traits> + bool regex_search(iterator first, iterator last, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Behaves "as if" by constructing an instance of +`match_results<BidirectionalIterator> what`, and then returning the result of +`regex_search(first, last, what, e, flags)`. + + template <class charT, class traits> + bool regex_search(const charT* str + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Returns the result of `regex_search(str, str + char_traits<charT>::length(str), e, flags)`. + + template <class ST, class SA, class charT, class traits> + bool regex_search(const basic_string<charT, ST, SA>& s, + const basic_regex<charT, traits>& e, + match_flag_type flags = match_default); + +[*Effects]: Returns the result of `regex_search(s.begin(), s.end(), e, flags)`. + +[h4 Examples] + +The following example, takes the contents of a file in the form of a string, +and searches for all the C++ class declarations in the file. The code will +work regardless of the way that `std::string` is implemented, for example it +could easily be modified to work with the SGI rope class, which uses a +non-contiguous storage strategy. + + #include <string> + #include <map> + #include <boost/regex.hpp> + + // purpose: + // takes the contents of a file in the form of a string + // and searches for all the C++ class definitions, storing + // their locations in a map of strings/int's + typedef std::map<std::string, int, std::less<std::string> > map_type; + + boost::regex expression( + "^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + "(class|struct)[[:space:]]*" + "(\\<\\w+\\>([[:blank:]]*\\([^)]*\\))?" + "[[:space:]]*)*(\\<\\w*\\>)[[:space:]]*" + "(<[^;:{]+>[[:space:]]*)?(\\{|:[^;\\{()]*\\{)"); + + void IndexClasses(map_type& m, const std::string& file) + { + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + boost::match_results<std::string::const_iterator> what; + boost::match_flag_type flags = boost::match_default; + while(regex_search(start, end, what, expression, flags)) + { + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + m[std::string(what[5].first, what[5].second) + + std::string(what[6].first, what[6].second)] + = what[5].first - file.begin(); + // update search position: + start = what[0].second; + // update flags: + flags |= boost::match_prev_avail; + flags |= boost::match_not_bob; + } + } + +[endsect] + diff --git a/libs/regex/doc/regex_split.qbk b/libs/regex/doc/regex_split.qbk new file mode 100644 index 0000000000..d05e7f0523 --- /dev/null +++ b/libs/regex/doc/regex_split.qbk @@ -0,0 +1,122 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_split regex_split (deprecated)] + +The algorithm [regex_split] has been deprecated in favor of the iterator +[regex_token_iterator] which has a more flexible and powerful interface, +as well as following the more usual standard library "pull" rather than +"push" semantics. + +Code which uses [regex_split] will continue to compile, the following +documentation is taken from a previous Boost.Regex version: + + #include <boost/regex.hpp> + +Algorithm [regex_split] performs a similar operation to the perl split operation, +and comes in three overloaded forms: + + template <class OutputIterator, class charT, class Traits1, class Alloc1, class Traits2> + std::size_t regex_split(OutputIterator out, + std::basic_string<charT, Traits1, Alloc1>& s, + const basic_regex<charT, Traits2>& e, + boost::match_flag_type flags, + std::size_t max_split); + + template <class OutputIterator, class charT, class Traits1, class Alloc1, class Traits2> + std::size_t regex_split(OutputIterator out, + std::basic_string<charT, Traits1, Alloc1>& s, + const basic_regex<charT, Traits2>& e, + boost::match_flag_type flags = match_default); + + template <class OutputIterator, class charT, class Traits1, class Alloc1> + std::size_t regex_split(OutputIterator out, + std::basic_string<charT, Traits1, Alloc1>& s); + +[*Effects]: Each version of the algorithm takes an output-iterator for +output, and a string for input. If the expression contains no marked +sub-expressions, then the algorithm writes one string onto the output-iterator +for each section of input that does not match the expression. +If the expression does contain marked sub-expressions, then each +time a match is found, one string for each marked sub-expression will be +written to the output-iterator. No more than max_split strings will be written +to the output-iterator. Before returning, all the input processed will be +deleted from the string /s/ (if /max_split/ is not reached then all of /s/ +will be deleted). Returns the number of strings written to the output-iterator. +If the parameter /max_split/ is not specified then it defaults to `UINT_MAX`. +If no expression is specified, then it defaults to "\\s+", and splitting occurs +on whitespace. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the +program runs out of stack space while matching the expression (if Boost.Regex is +configured in recursive mode), or if the matcher exhausts its permitted +memory allocation (if Boost.Regex is configured in non-recursive mode). + +[*Example]: the following function will split the input string into a +series of tokens, and remove each token from the string /s/: + + unsigned tokenise(std::list<std::string>& l, std::string& s) + { + return boost::regex_split(std::back_inserter(l), s); + } + +Example: the following short program will extract all of the URL's +from a html file, and print them out to cout: + + #include <list> + #include <fstream> + #include <iostream> + #include <boost/regex.hpp> + + boost::regex e("<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"", + boost::regbase::normal | boost::regbase::icase); + + void load_file(std::string& s, std::istream& is) + { + s.erase(); + // + // attempt to grow string buffer to match file size, + // this doesn't always work... + s.reserve(is.rdbuf()->in_avail()); + char c; + while(is.get(c)) + { + // use logarithmic growth stategy, in case + // in_avail (above) returned zero: + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } + } + + + int main(int argc, char** argv) + { + std::string s; + std::list<std::string> l; + + for(int i = 1; i < argc; ++i) + { + std::cout << "Findings URL's in " << argv[i] << ":" << std::endl; + s.erase(); + std::ifstream is(argv[i]); + load_file(s, is); + boost::regex_split(std::back_inserter(l), s, e); + while(l.size()) + { + s = *(l.begin()); + l.pop_front(); + std::cout << s << std::endl; + } + } + return 0; + } + +[endsect] + diff --git a/libs/regex/doc/regex_token_iterator.qbk b/libs/regex/doc/regex_token_iterator.qbk new file mode 100644 index 0000000000..c975c5afe7 --- /dev/null +++ b/libs/regex/doc/regex_token_iterator.qbk @@ -0,0 +1,431 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_token_iterator regex_token_iterator] + +The template class [regex_token_iterator] is an iterator adapter; that is to +say it represents a new view of an existing iterator sequence, +by enumerating all the occurrences of a regular expression within that +sequence, and presenting one or more character sequence for each match found. +Each position enumerated by the iterator is a [sub_match] object that represents +what matched a particular sub-expression within the regular expression. +When class [regex_token_iterator] is used to enumerate a single sub-expression +with index -1, then the iterator performs field splitting: that is +to say it enumerates one character sequence for each section of the character +container sequence that does not match the regular expression specified. + + template <class BidirectionalIterator, + class charT = iterator_traits<BidirectionalIterator>::value_type, + class traits = regex_traits<charT> > + class regex_token_iterator + { + public: + typedef basic_regex<charT, traits> regex_type; + typedef sub_match<BidirectionalIterator> value_type; + typedef typename iterator_traits<BidirectionalIterator>::difference_type difference_type; + typedef const value_type* pointer; + typedef const value_type& reference; + typedef std::forward_iterator_tag iterator_category; + + ``[link boost_regex.regex_token_iterator.construct1 regex_token_iterator]``(); + ``[link boost_regex.regex_token_iterator.construct2 regex_token_iterator]``(BidirectionalIterator a, + BidirectionalIterator b, + const regex_type& re, + int submatch = 0, + match_flag_type m = match_default); + ``[link boost_regex.regex_token_iterator.construct3 regex_token_iterator]``(BidirectionalIterator a, + BidirectionalIterator b, + const regex_type& re, + const std::vector<int>& submatches, + match_flag_type m = match_default); + template <std::size_t N> + ``[link boost_regex.regex_token_iterator.construct4 regex_token_iterator]``(BidirectionalIterator a, + BidirectionalIterator b, + const regex_type& re, + const int (&submatches)[N], + match_flag_type m = match_default); + ``[link boost_regex.regex_token_iterator.construct5 regex_token_iterator]``(const regex_token_iterator&); + regex_token_iterator& ``[link boost_regex.regex_token_iterator.assign operator=]``(const regex_token_iterator&); + bool ``[link boost_regex.regex_token_iterator.op_eq operator==]``(const regex_token_iterator&)const; + bool ``[link boost_regex.regex_token_iterator.op_ne operator!=]``(const regex_token_iterator&)const; + const value_type& ``[link boost_regex.regex_token_iterator.op_deref operator*]``()const; + const value_type* ``[link boost_regex.regex_token_iterator.op_arrow operator->]``()const; + regex_token_iterator& ``[link boost_regex.regex_token_iterator.op_inc1 operator++]``(); + regex_token_iterator ``[link boost_regex.regex_token_iterator.op_inc2 operator++]``(int); + }; + + typedef regex_token_iterator<const char*> cregex_token_iterator; + typedef regex_token_iterator<std::string::const_iterator> sregex_token_iterator; + #ifndef BOOST_NO_WREGEX + typedef regex_token_iterator<const wchar_t*> wcregex_token_iterator; + typedef regex_token_iterator<<std::wstring::const_iterator> wsregex_token_iterator; + #endif + + template <class charT, class traits> + regex_token_iterator<const charT*, charT, traits> + ``[link boost_regex.regex_token_iterator.make make_regex_token_iterator]``( + const charT* p, + const basic_regex<charT, traits>& e, + int submatch = 0, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, class ST, class SA> + regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> + ``[link boost_regex.regex_token_iterator.make make_regex_token_iterator]``( + const std::basic_string<charT, ST, SA>& p, + const basic_regex<charT, traits>& e, + int submatch = 0, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, std::size_t N> + regex_token_iterator<const charT*, charT, traits> + ``[link boost_regex.regex_token_iterator.make make_regex_token_iterator]``( + const charT* p, + const basic_regex<charT, traits>& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, class ST, class SA, std::size_t N> + regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> + ``[link boost_regex.regex_token_iterator.make make_regex_token_iterator]``( + const std::basic_string<charT, ST, SA>& p, + const basic_regex<charT, traits>& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits> + regex_token_iterator<const charT*, charT, traits> + ``[link boost_regex.regex_token_iterator.make make_regex_token_iterator]``( + const charT* p, + const basic_regex<charT, traits>& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, class ST, class SA> + regex_token_iterator< + typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> + ``[link boost_regex.regex_token_iterator.make make_regex_token_iterator]``( + const std::basic_string<charT, ST, SA>& p, + const basic_regex<charT, traits>& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + +[h4 Description] + +[#boost_regex.regex_token_iterator.construct1] + + regex_token_iterator(); + +[*Effects]: constructs an end of sequence iterator. + +[#boost_regex.regex_token_iterator.construct2] + + regex_token_iterator(BidirectionalIterator a, + BidirectionalIterator b, + const regex_type& re, + int submatch = 0, + match_flag_type m = match_default); + +[*Preconditions]: `!re.empty()`. Object /re/ shall exist for the lifetime of +the iterator constructed from it. + +[*Effects]: constructs a [regex_token_iterator] that will enumerate one string for +each regular expression match of the expression /re/ found within the sequence \[a,b), +using match flags /m/ (see [match_flag_type]). The string enumerated is the sub-expression /submatch/ +for each match found; if /submatch/ is -1, then enumerates all the text +sequences that did not match the expression /re/ (that is to performs field +splitting). + +[*Throws]: `std::runtime_error` if the complexity of matching the expression against +an N character string begins to exceed O(N[super 2]), or if the program runs +out of stack space while matching the expression (if Boost.Regex is configured +in recursive mode), or if the matcher exhausts its permitted memory +allocation (if Boost.Regex is configured in non-recursive mode). + +[#boost_regex.regex_token_iterator.construct3] + + regex_token_iterator(BidirectionalIterator a, + BidirectionalIterator b, + const regex_type& re, + const std::vector<int>& submatches, + match_flag_type m = match_default); + +[*Preconditions]: `submatches.size() && !re.empty()`. Object /re/ shall +exist for the lifetime of the iterator constructed from it. + +[*Effects]: constructs a [regex_token_iterator] that will enumerate +`submatches.size()` strings for each regular expression match of +the expression /re/ found within the sequence \[a,b), using match flags /m/ +(see [match_flag_type]). For each match found one string will be enumerated +for each sub-expression index contained within submatches vector; if +`submatches[0]` is -1, then the first string enumerated for each match will be +all of the text from end of the last match to the start of the current match, +in addition there will be one extra string enumerated when no more matches can +be found: from the end of the last match found, to the end of the underlying sequence. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the +program runs out of stack space while matching the expression (if Boost.Regex is +configured in recursive mode), or if the matcher exhausts its permitted memory +allocation (if Boost.Regex is configured in non-recursive mode). + +[#boost_regex.regex_token_iterator.construct4] + + template <std::size_t N> + regex_token_iterator(BidirectionalIterator a, + BidirectionalIterator b, + const regex_type& re, + const int (&submatches)[R], + match_flag_type m = match_default); + +[*Preconditions]: `!re.empty()`. Object /re/ shall exist for the lifetime of the iterator constructed from it. + +[*Effects]: constructs a [regex_token_iterator] that will enumerate /R/ strings +for each regular expression match of the expression /re/ found within the sequence +\[a,b), using match flags /m/ (see [match_flag_type]). For each match found one +string will be enumerated for each sub-expression index contained within the +/submatches/ array; if `submatches[0]` is -1, then the first string enumerated for +each match will be all of the text from end of the last match to the start +of the current match, in addition there will be one extra string enumerated when +no more matches can be found: from the end of the last match found, to +the end of the underlying sequence. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the +program runs out of stack space while matching the expression (if Boost.Regex +is configured in recursive mode), or if the matcher exhausts its +permitted memory allocation (if Boost.Regex is configured in non-recursive mode). + +[#boost_regex.regex_token_iterator.construct5] + + regex_token_iterator(const regex_token_iterator& that); + +[*Effects]: constructs a copy of `that`. + +[*Postconditions]: `*this == that`. + +[#boost_regex.regex_token_iterator.assign] + + regex_token_iterator& operator=(const regex_token_iterator& that); + +[*Effects]: sets `*this` to be equal to `that`. + +[*Postconditions]: `*this == that`. + +[#boost_regex.regex_token_iterator.op_eq] + + bool operator==(const regex_token_iterator&)const; + +[*Effects]: returns true if `*this` is the same position as `that`. + +[#boost_regex.regex_token_iterator.op_ne] + + bool operator!=(const regex_token_iterator&)const; + +[*Effects]: returns `!(*this == that)`. + +[#boost_regex.regex_token_iterator.op_deref] + + const value_type& operator*()const; + +[*Effects]: returns the current character sequence being enumerated. + +[#boost_regex.regex_token_iterator.op_arrow] + + const value_type* operator->()const; + +[*Effects]: returns `&(*this)`. + +[#boost_regex.regex_token_iterator.op_inc1] + + regex_token_iterator& operator++(); + +[*Effects]: Moves on to the next character sequence to be enumerated. + +[*Throws]: `std::runtime_error` if the complexity of matching the expression +against an N character string begins to exceed O(N[super 2]), or if the program +runs out of stack space while matching the expression (if Boost.Regex is +configured in recursive mode), or if the matcher exhausts its permitted +memory allocation (if Boost.Regex is configured in non-recursive mode). + +[*Returns]: `*this`. + +[#boost_regex.regex_token_iterator.op_inc2] + + regex_token_iterator& operator++(int); + +[*Effects]: constructs a copy result of `*this`, then calls `++(*this)`. + +[*Returns]: result. + +[#boost_regex.regex_token_iterator.make] + + template <class charT, class traits> + regex_token_iterator<const charT*, charT, traits> + make_regex_token_iterator( + const charT* p, + const basic_regex<charT, traits>& e, + int submatch = 0, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, class ST, class SA> + regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> + make_regex_token_iterator( + const std::basic_string<charT, ST, SA>& p, + const basic_regex<charT, traits>& e, + int submatch = 0, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, std::size_t N> + regex_token_iterator<const charT*, charT, traits> + make_regex_token_iterator( + const charT* p, + const basic_regex<charT, traits>& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, class ST, class SA, std::size_t N> + regex_token_iterator< + typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> + make_regex_token_iterator( + const std::basic_string<charT, ST, SA>& p, + const basic_regex<charT, traits>& e, + const int (&submatch)[N], + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits> + regex_token_iterator<const charT*, charT, traits> + make_regex_token_iterator( + const charT* p, + const basic_regex<charT, traits>& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + + template <class charT, class traits, class ST, class SA> + regex_token_iterator< + typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> + make_regex_token_iterator( + const std::basic_string<charT, ST, SA>& p, + const basic_regex<charT, traits>& e, + const std::vector<int>& submatch, + regex_constants::match_flag_type m = regex_constants::match_default); + +[*Effects]: returns a [regex_token_iterator] that enumerates one [sub_match] +for each value in /submatch/ for each occurrence of regular expression /e/ +in string /p/, matched using [match_flag_type] /m/. + +[h4 Examples] + +The following example takes a string and splits it into a series of tokens: + + #include <iostream> + #include <boost/regex.hpp> + + using namespace std; + + int main(int argc) + { + string s; + do{ + if(argc == 1) + { + cout << "Enter text to split (or \"quit\" to exit): "; + getline(cin, s); + if(s == "quit") break; + } + else + s = "This is a string of tokens"; + + boost::regex re("\\s+"); + boost::sregex_token_iterator i(s.begin(), s.end(), re, -1); + boost::sregex_token_iterator j; + + unsigned count = 0; + while(i != j) + { + cout << *i++ << endl; + count++; + } + cout << "There were " << count << " tokens found." << endl; + + }while(argc == 1); + return 0; + } + + +The following example takes a html file and outputs a list of all the linked files: + + #include <fstream> + #include <iostream> + #include <iterator> + #include <boost/regex.hpp> + + boost::regex e("<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"", + boost::regex::normal | boost::regbase::icase); + + void load_file(std::string& s, std::istream& is) + { + s.erase(); + // + // attempt to grow string buffer to match file size, + // this doesn't always work... + s.reserve(is.rdbuf()->in_avail()); + char c; + while(is.get(c)) + { + // use logarithmic growth stategy, in case + // in_avail (above) returned zero: + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } + } + + int main(int argc, char** argv) + { + std::string s; + int i; + for(i = 1; i < argc; ++i) + { + std::cout << "Findings URL's in " << argv[i] << ":" << std::endl; + s.erase(); + std::ifstream is(argv[i]); + load_file(s, is); + boost::sregex_token_iterator i(s.begin(), s.end(), e, 1); + boost::sregex_token_iterator j; + while(i != j) + { + std::cout << *i++ << std::endl; + } + } + // + // alternative method: + // test the array-literal constructor, and split out the whole + // match as well as $1.... + // + for(i = 1; i < argc; ++i) + { + std::cout << "Findings URL's in " << argv[i] << ":" << std::endl; + s.erase(); + std::ifstream is(argv[i]); + load_file(s, is); + const int subs[] = {1, 0,}; + boost::sregex_token_iterator i(s.begin(), s.end(), e, subs); + boost::sregex_token_iterator j; + while(i != j) + { + std::cout << *i++ << std::endl; + } + } + + return 0; + } + + +[endsect] + diff --git a/libs/regex/doc/regex_traits.qbk b/libs/regex/doc/regex_traits.qbk new file mode 100644 index 0000000000..7faae8302d --- /dev/null +++ b/libs/regex/doc/regex_traits.qbk @@ -0,0 +1,50 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:regex_traits regex_traits] + + namespace boost{ + + template <class charT, class implementationT = sensible_default_choice> + struct regex_traits : public implementationT + { + regex_traits() : implementationT() {} + }; + + template <class charT> + struct c_regex_traits; + + template <class charT> + class cpp_regex_traits; + + template <class charT> + class w32_regex_traits; + + } // namespace boost + +[h4 Description] + +The class `regex_traits` is just a thin wrapper around an actual implemention +class, which may be one of: + +* `c_regex_traits`: this class is deprecated, it wraps the C locale, and is used as the default implementation when the platform is not Win32, and the C++ locale is not available. +* `cpp_regex_traits`: the default traits class for non-Win32 platforms, allows the regex class to be imbued with a std::locale instance. +* `w32_regex_traits`: the default traits class implementation on Win32 platforms, allows the regex class to be imbued with an LCID. + +The default behavior can be altered by defining one of the following +configuration macros in +[@../../../../boost/regex/user.hpp boost/regex/user.hpp] + +* BOOST_REGEX_USE_C_LOCALE: makes `c_regex_traits` the default. +* BOOST_REGEX_USE_CPP_LOCALE: makes `cpp_regex_traits` the default. + +All these traits classes fulfil the +[link boost_regex.ref.concepts.traits_concept traits class requirements]. + +[endsect] + diff --git a/libs/regex/doc/standards.qbk b/libs/regex/doc/standards.qbk new file mode 100644 index 0000000000..bfb803b1c1 --- /dev/null +++ b/libs/regex/doc/standards.qbk @@ -0,0 +1,94 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:standards Standards Conformance] + +[h4 C++] + +Boost.Regex is intended to conform to the [tr1]. + +[h4 ECMAScript / JavaScript] + +All of the ECMAScript regular expression syntax features are supported, except that: + +The escape sequence \\u matches any upper case character (the same as \[\[:upper:\]\]) +rather than a Unicode escape sequence; use \\x{DDDD} for Unicode escape sequences. + +[h4 Perl] + +Almost all Perl features are supported, except for: + +(?{code}) Not implementable in a compiled strongly typed language. + +(??{code}) Not implementable in a compiled strongly typed language. + +(*VERB) The [@http://perldoc.perl.org/perlre.html#Special-Backtracking-Control-Verbs +backtracking control verbs] are not recognised or implemented at this time. + +In addition the following features behave slightly differently from Perl: + +^ $ \Z These recognise any line termination sequence, and not just \\n: see the Unicode requirements below. + +[h4 POSIX] + +All the POSIX basic and extended regular expression features are supported, +except that: + +No character collating names are recognized except those specified in the +POSIX standard for the C locale, unless they are explicitly registered with the +traits class. + +Character equivalence classes ( \[\[\=a\=\]\] etc) are probably buggy except on Win32. +Implementing this feature requires knowledge of the format of the string sort +keys produced by the system; if you need this, and the default implementation +doesn't work on your platform, then you will need to supply a custom traits class. + +[h4 Unicode] + +The following comments refer to +[@http://unicode.org/reports/tr18/ Unicode Technical Standard #18: Unicode +Regular Expressions version 11]. + +[table +[[Item][Feature][Support]] +[[1.1][Hex Notation][Yes: use \x{DDDD} to refer to code point UDDDD.]] +[[1.2][Character Properties][All the names listed under the General Category Property are supported. Script names and Other Names are not currently supported.]] +[[1.3][Subtraction and Intersection][Indirectly support by forward-lookahead: + +`(?=[[:X:]])[[:Y:]]` + +Gives the intersection of character properties X and Y. + +`(?![[:X:]])[[:Y:]]` + +Gives everything in Y that is not in X (subtraction).]] +[[1.4][Simple Word Boundaries][Conforming: non-spacing marks are included in the set of word characters.]] +[[1.5][Caseless Matching][Supported, note that at this level, case transformations are 1:1, many to many case folding operations are not supported (for example "'''ß'''" to "SS").]] +[[1.6][Line Boundaries][Supported, except that "." matches only one character of "\\r\\n". Other than that word boundaries match correctly; including not matching in the middle of a "\\r\\n" sequence.]] +[[1.7][Code Points][Supported: provided you use the u32* algorithms, then UTF-8, UTF-16 and UTF-32 are all treated as sequences of 32-bit code points.]] +[[2.1][Canonical Equivalence][Not supported: it is up to the user of the library to convert all text into the same canonical form as the regular expression.]] +[[2.2][Default Grapheme Clusters][Not supported.]] +[[2.3Default Word Boundaries][Not supported.]] +[[2.4][Default Loose Matches][Not Supported.]] +[[2.5][Named Properties][Supported: the expression "\[\[:name:\]\]" or \\N{name} matches the named character "name".]] +[[2.6][Wildcard properties][Not Supported.]] +[[3.1][Tailored Punctuation.][Not Supported.]] +[[3.2][Tailored Grapheme Clusters][Not Supported.]] +[[3.3][Tailored Word Boundaries.][Not Supported.]] +[[3.4][Tailored Loose Matches][Partial support: \[\[\=c\=\]\] matches characters with the same primary equivalence class as "c".]] +[[3.5][Tailored Ranges][Supported: \[a-b\] matches any character that collates in the range a to b, when the expression is constructed with the collate flag set.]] +[[3.6][Context Matches][Not Supported.]] +[[3.7][Incremental Matches][Supported: pass the flag `match_partial` to the regex algorithms.]] +[[3.8][Unicode Set Sharing][Not Supported.]] +[[3.9][Possible Match Sets][Not supported, however this information is used internally to optimise the matching of regular expressions, and return quickly if no match is possible.]] +[[3.10][Folded Matching][Partial Support: It is possible to achieve a similar effect by using a custom regular expression traits class.]] +[[3.11][Custom Submatch Evaluation][Not Supported.]] +] + +[endsect] + diff --git a/libs/regex/doc/sub_match.qbk b/libs/regex/doc/sub_match.qbk new file mode 100644 index 0000000000..653c0f376f --- /dev/null +++ b/libs/regex/doc/sub_match.qbk @@ -0,0 +1,850 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:sub_match sub_match] + + #include <boost/regex.hpp> + +Regular expressions are different from many simple pattern-matching algorithms in +that as well as finding an overall match they can also produce sub-expression +matches: each sub-expression being delimited in the pattern by a pair of +parenthesis (...). There has to be some method for reporting sub-expression +matches back to the user: this is achieved this by defining a class +[match_results] that acts as an indexed collection of sub-expression matches, +each sub-expression match being contained in an object of type [sub_match]. + +Objects of type [sub_match] may only be obtained by subscripting an object of +type [match_results]. + +Objects of type [sub_match] may be compared to objects of type `std::basic_string`, +or `const charT*` or `const charT`. + +Objects of type [sub_match] may be added to objects of type `std::basic_string`, or +`const charT*` or `const charT`, to produce a new `std::basic_string` object. + +When the marked sub-expression denoted by an object of type [sub_match] +participated in a regular expression match then member /matched/ evaluates +to /true/, and members /first/ and /second/ denote the range of characters +\[first,second) which formed that match. Otherwise /matched/ is /false/, and +members /first/ and /second/ contained undefined values. + +When the marked sub-expression denoted by an object of type +[sub_match] was repeated, then the [sub_match] object represents +the match obtained by the /last/ repeat. The complete set of all the +captures obtained for all the repeats, may be accessed via the +captures() member function (Note: this has serious performance implications, +you have to explicitly enable this feature). + +If an object of type [sub_match] represents sub-expression 0 - that is to +say the whole match - then member /matched/ is always /true/, unless a +[link boost_regex.partial_matches partial match] was obtained as a result of the flag +`match_partial` being passed to a regular expression algorithm, in which +case member /matched/ is /false/, and members /first/ and /second/ represent +the character range that formed the partial match. + + namespace boost{ + + template <class BidirectionalIterator> + class sub_match; + + typedef sub_match<const char*> csub_match; + typedef sub_match<const wchar_t*> wcsub_match; + typedef sub_match<std::string::const_iterator> ssub_match; + typedef sub_match<std::wstring::const_iterator> wssub_match; + + template <class BidirectionalIterator> + class sub_match : public std::pair<BidirectionalIterator, BidirectionalIterator> + { + public: + typedef typename iterator_traits<BidirectionalIterator>::value_type ``[link boost_regex.sub_match.value_type value_type]``; + typedef typename iterator_traits<BidirectionalIterator>::difference_type ``[link boost_regex.sub_match.diff_type difference_type]``; + typedef BidirectionalIterator ``[link boost_regex.sub_match.it_type iterator]``; + + bool ``[link boost_regex.sub_match.matched matched]``; + + difference_type ``[link boost_regex.sub_match.length length]``()const; + ``[link boost_regex.sub_match.cast operator basic_string<value_type>]``()const; + basic_string<value_type> ``[link boost_regex.sub_match.str str]``()const; + + int ``[link boost_regex.sub_match.compare1 compare]``(const sub_match& s)const; + int ``[link boost_regex.sub_match.compare2 compare]``(const basic_string<value_type>& s)const; + int ``[link boost_regex.sub_match.compare3 compare]``(const value_type* s)const; + #ifdef BOOST_REGEX_MATCH_EXTRA + typedef implementation-private ``[link boost_regex.sub_match.cap_seq_type capture_sequence_type]``; + const capture_sequence_type& ``[link boost_regex.sub_match.captures captures]``()const; + #endif + }; + // + // comparisons to another sub_match: + // + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare1 operator ==]`` (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare2 operator !=]`` (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare3 operator <]`` (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare4 operator <=]`` (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare5 operator >=]`` (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare6 operator >]`` (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + + + // + // comparisons to a basic_string: + // + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare7 operator ==]`` (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare8 operator != ]``(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare9 operator <]`` (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare10 operator >]`` (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare11 operator >= ]``(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare12 operator <= ]``(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare13 operator == ]``(const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare14 operator != ]``(const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare15 operator < ]``(const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare16 operator > ]``(const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare17 operator >= ]``(const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + template <class BidirectionalIterator, class traits, class Allocator> + bool ``[link boost_regex.sub_match.op_compare18 operator <= ]``(const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + + // + // comparisons to a pointer to a character array: + // + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare19 operator == ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare20 operator != ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare21 operator < ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare22 operator > ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare23 operator >= ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare24 operator <= ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare25 operator == ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare26 operator != ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare27 operator < ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare28 operator > ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare29 operator >= ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare30 operator <= ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + + // + // comparisons to a single character: + // + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare31 operator == ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare32 operator != ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare33 operator < ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare34 operator > ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare35 operator >= ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare36 operator <= ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare37 operator == ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare38 operator != ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare39 operator < ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare40 operator > ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare41 operator >= ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + template <class BidirectionalIterator> + bool ``[link boost_regex.sub_match.op_compare42 operator <= ]``(const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + // + // addition operators: + // + template <class BidirectionalIterator, class traits, class Allocator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> + ``[link boost_regex.sub_match.op_add1 operator + ]``(const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& s, + const sub_match<BidirectionalIterator>& m); + template <class BidirectionalIterator, class traits, class Allocator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> + ``[link boost_regex.sub_match.op_add2 operator + ]``(const sub_match<BidirectionalIterator>& m, + const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& s); + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + ``[link boost_regex.sub_match.op_add3 operator + ]``(typename iterator_traits<BidirectionalIterator>::value_type const* s, + const sub_match<BidirectionalIterator>& m); + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + ``[link boost_regex.sub_match.op_add4 operator + ]``(const sub_match<BidirectionalIterator>& m, + typename iterator_traits<BidirectionalIterator>::value_type const * s); + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + ``[link boost_regex.sub_match.op_add5 operator + ]``(typename iterator_traits<BidirectionalIterator>::value_type const& s, + const sub_match<BidirectionalIterator>& m); + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + ``[link boost_regex.sub_match.op_add6 operator + ]``(const sub_match<BidirectionalIterator>& m, + typename iterator_traits<BidirectionalIterator>::value_type const& s); + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + ``[link boost_regex.sub_match.op_add7 operator + ]``(const sub_match<BidirectionalIterator>& m1, + const sub_match<BidirectionalIterator>& m2); + + // + // stream inserter: + // + template <class charT, class traits, class BidirectionalIterator> + basic_ostream<charT, traits>& + ``[link boost_regex.sub_match.op_stream operator << ]``(basic_ostream<charT, traits>& os, + const sub_match<BidirectionalIterator>& m); + + } // namespace boost + +[h4 Description] + +[h5 Members] + +[#boost_regex.sub_match.value_type] + + typedef typename std::iterator_traits<iterator>::value_type value_type; + +The type pointed to by the iterators. + +[#boost_regex.sub_match.diff_type] + + typedef typename std::iterator_traits<iterator>::difference_type difference_type; + +A type that represents the difference between two iterators. + +[#boost_regex.sub_match.it_type] + + typedef BidirectionalIterator iterator; + +The iterator type. + +[#boost_regex.sub_match.first] + + iterator first + +An iterator denoting the position of the start of the match. + +[#boost_regex.sub_match.second] + + iterator second + +An iterator denoting the position of the end of the match. + +[#boost_regex.sub_match.matched] + + bool matched + +A Boolean value denoting whether this sub-expression participated in the match. + +[#boost_regex.sub_match.length] + + static difference_type length(); + +[*Effects]: returns the length of this matched sub-expression, or 0 +if this sub-expression was not matched: `matched ? distance(first, second) : 0)`. + +[#boost_regex.sub_match.cast] + + operator basic_string<value_type>()const; + +[*Effects]: converts `*this` into a string: returns +`(matched ? basic_string<value_type>(first, second) : basic_string<value_type>())`. + +[#boost_regex.sub_match.str] + + basic_string<value_type> str()const; + +[*Effects]: returns a string representation of `*this`: +`(matched ? basic_string<value_type>(first, second) : basic_string<value_type>())`. + +[#boost_regex.sub_match.compare1] + + int compare(const sub_match& s)const; + +[*Effects]: performs a lexical comparison to /s/: returns `str().compare(s.str())`. + +[#boost_regex.sub_match.compare2] + + int compare(const basic_string<value_type>& s)const; + +[*Effects]: compares `*this` to the string /s/: returns `str().compare(s)`. + +[#boost_regex.sub_match.compare3] + + int compare(const value_type* s)const; + +[*Effects]: compares `*this` to the null-terminated string /s/: returns `str().compare(s)`. + +[#boost_regex.sub_match.cap_seq_type] + + typedef implementation-private capture_sequence_type; + +Defines an implementation-specific type that satisfies the requirements of +a standard library Sequence (21.1.1 including the optional Table 68 operations), +whose value_type is a `sub_match<BidirectionalIterator>`. This type +happens to be `std::vector<sub_match<BidirectionalIterator> >`, but you +shouldn't actually rely on that. + +[#boost_regex.sub_match.captures] + + const capture_sequence_type& captures()const; + +[*Effects]: returns a sequence containing all the captures obtained for this +sub-expression. + +[*Preconditions]: the library must be built and used with +BOOST_REGEX_MATCH_EXTRA defined, and you must pass the flag `match_extra` +to the regex matching functions ([regex_match], [regex_search], +[regex_iterator] or [regex_token_iterator]) in order for this member +#function to be defined and return useful information. + +[*Rationale]: Enabling this feature has several consequences: + +* sub_match occupies more memory resulting in complex expressions running out of memory or stack space more quickly during matching. +* The matching algorithms are less efficient at handling some features (independent sub-expressions for example), even when match_extra is not used. +* The matching algorithms are much less efficient (i.e. slower), when match_extra is used. Mostly this is down to the extra memory allocations that have to take place. + +[h5 sub_match non-member operators] + +[#boost_regex.sub_match.op_compare1] + + template <class BidirectionalIterator> + bool operator == (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs.compare(rhs) == 0`. + +[#boost_regex.sub_match.op_compare2] + + template <class BidirectionalIterator> + bool operator != (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs.compare(rhs) != 0`. + +[#boost_regex.sub_match.op_compare3] + + template <class BidirectionalIterator> + bool operator < (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs.compare(rhs) < 0`. + +[#boost_regex.sub_match.op_compare4] + + template <class BidirectionalIterator> + bool operator <= (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs.compare(rhs) <= 0`. + +[#boost_regex.sub_match.op_compare5] + + template <class BidirectionalIterator> + bool operator >= (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs.compare(rhs) >= 0`. + +[#boost_regex.sub_match.op_compare6] + + template <class BidirectionalIterator> + bool operator > (const sub_match<BidirectionalIterator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs.compare(rhs) > 0`. + +[#boost_regex.sub_match.op_compare7] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator == (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs == rhs.str()`. + +[#boost_regex.sub_match.op_compare8] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator != (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs != rhs.str()`. + +[#boost_regex.sub_match.op_compare9] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator < (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs < rhs.str()`. + +[#boost_regex.sub_match.op_compare10] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator > (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs > rhs.str()`. + +[#boost_regex.sub_match.op_compare11] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator >= (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs >= rhs.str()`. + +[#boost_regex.sub_match.op_compare12] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator <= (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs <= rhs.str()`. + +[#boost_regex.sub_match.op_compare13] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator == (const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + +[*Effects]: returns `lhs.str() == rhs`. + +[#boost_regex.sub_match.op_compare14] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator != (const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + +[*Effects]: returns `lhs.str() != rhs`. + +[#boost_regex.sub_match.op_compare15] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator < (const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + +[*Effects]: returns `lhs.str() < rhs`. + +[#boost_regex.sub_match.op_compare16] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator > (const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + +[*Effects]: returns `lhs.str() > rhs`. + +[#boost_regex.sub_match.op_compare17] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator >= (const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + +[*Effects]: returns `lhs.str() >= rhs`. + +[#boost_regex.sub_match.op_compare18] + + template <class BidirectionalIterator, class traits, class Allocator> + bool operator <= (const sub_match<BidirectionalIterator>& lhs, + const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& rhs); + +[*Effects]: returns `lhs.str() <= rhs`. + +[#boost_regex.sub_match.op_compare19] + + template <class BidirectionalIterator> + bool operator == (typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs == rhs.str()`. + +[#boost_regex.sub_match.op_compare20] + + template <class BidirectionalIterator> + bool operator != (typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs != rhs.str()`. + +[#boost_regex.sub_match.op_compare21] + + template <class BidirectionalIterator> + bool operator < (typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs < rhs.str()`. + +[#boost_regex.sub_match.op_compare22] + + template <class BidirectionalIterator> + bool operator > (typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs > rhs.str()`. + +[#boost_regex.sub_match.op_compare23] + + template <class BidirectionalIterator> + bool operator >= (typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs >= rhs.str()`. + +[#boost_regex.sub_match.op_compare24] + + template <class BidirectionalIterator> + bool operator <= (typename iterator_traits<BidirectionalIterator>::value_type const* lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs <= rhs.str()`. + +[#boost_regex.sub_match.op_compare25] + + template <class BidirectionalIterator> + bool operator == (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + +[*Effects]: returns `lhs.str() == rhs`. + +[#boost_regex.sub_match.op_compare26] + + template <class BidirectionalIterator> + bool operator != (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + +[*Effects]: returns `lhs.str() != rhs`. + +[#boost_regex.sub_match.op_compare27] + + template <class BidirectionalIterator> + bool operator < (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + +[*Effects]: returns `lhs.str() < rhs`. + +[#boost_regex.sub_match.op_compare28] + + template <class BidirectionalIterator> + bool operator > (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + +[*Effects]: returns `lhs.str() > rhs`. + +[#boost_regex.sub_match.op_compare29] + + template <class BidirectionalIterator> + bool operator >= (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + +[*Effects]: returns `lhs.str() >= rhs`. + +[#boost_regex.sub_match.op_compare30] + + template <class BidirectionalIterator> + bool operator <= (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const* rhs); + +[*Effects]: returns `lhs.str() <= rhs`. + +[#boost_regex.sub_match.op_compare31] + + template <class BidirectionalIterator> + bool operator == (typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs == rhs.str()`. + +[#boost_regex.sub_match.op_compare32] + + template <class BidirectionalIterator> + bool operator != (typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs != rhs.str()`. + +[#boost_regex.sub_match.op_compare33] + + template <class BidirectionalIterator> + bool operator < (typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs < rhs.str()`. + +[#boost_regex.sub_match.op_compare34] + + template <class BidirectionalIterator> + bool operator > (typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs > rhs.str()`. + +[#boost_regex.sub_match.op_compare35] + + template <class BidirectionalIterator> + bool operator >= (typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs >= rhs.str()`. + +[#boost_regex.sub_match.op_compare36] + + template <class BidirectionalIterator> + bool operator <= (typename iterator_traits<BidirectionalIterator>::value_type const& lhs, + const sub_match<BidirectionalIterator>& rhs); + +[*Effects]: returns `lhs <= rhs.str()`. + +[#boost_regex.sub_match.op_compare37] + + template <class BidirectionalIterator> + bool operator == (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + +[*Effects]: returns `lhs.str() == rhs`. + +[#boost_regex.sub_match.op_compare38] + + template <class BidirectionalIterator> + bool operator != (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + +[*Effects]: returns `lhs.str() != rhs`. + +[#boost_regex.sub_match.op_compare39] + + template <class BidirectionalIterator> + bool operator < (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + +[*Effects]: returns `lhs.str() < rhs`. + +[#boost_regex.sub_match.op_compare40] + + template <class BidirectionalIterator> + bool operator > (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + +[*Effects]: returns `lhs.str() > rhs`. + +[#boost_regex.sub_match.op_compare41] + + template <class BidirectionalIterator> + bool operator >= (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + +[*Effects]: returns `lhs.str() >= rhs`. + +[#boost_regex.sub_match.op_compare42] + + template <class BidirectionalIterator> + bool operator <= (const sub_match<BidirectionalIterator>& lhs, + typename iterator_traits<BidirectionalIterator>::value_type const& rhs); + +[*Effects]: returns `lhs.str() <= rhs`. + +The addition operators for [sub_match] allow you to add a [sub_match] +to any type to which you can add a `std::string` and obtain a new +string as the result. + +[#boost_regex.sub_match.op_add1] + + template <class BidirectionalIterator, class traits, class Allocator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> + operator + (const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& s, + const sub_match<BidirectionalIterator>& m); + +[*Effects]: returns `s + m.str()`. + +[#boost_regex.sub_match.op_add2] + + template <class BidirectionalIterator, class traits, class Allocator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> + operator + (const sub_match<BidirectionalIterator>& m, + const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, + traits, + Allocator>& s); + +[*Effects]: returns `m.str() + s`. + +[#boost_regex.sub_match.op_add3] + + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + operator + (typename iterator_traits<BidirectionalIterator>::value_type const* s, + const sub_match<BidirectionalIterator>& m); + +[*Effects]: returns `s + m.str()`. + +[#boost_regex.sub_match.op_add4] + + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + operator + (const sub_match<BidirectionalIterator>& m, + typename iterator_traits<BidirectionalIterator>::value_type const * s); + +[*Effects]: returns `m.str() + s`. + +[#boost_regex.sub_match.op_add5] + + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + operator + (typename iterator_traits<BidirectionalIterator>::value_type const& s, + const sub_match<BidirectionalIterator>& m); + +[*Effects]: returns `s + m.str()`. + +[#boost_regex.sub_match.op_add6] + + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + operator + (const sub_match<BidirectionalIterator>& m, + typename iterator_traits<BidirectionalIterator>::value_type const& s); + +[*Effects]: returns `m.str() + s`. + +[#boost_regex.sub_match.op_add7] + + template <class BidirectionalIterator> + std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> + operator + (const sub_match<BidirectionalIterator>& m1, + const sub_match<BidirectionalIterator>& m2); + +[*Effects]: returns `m1.str() + m2.str()`. + +[h5 Stream inserter] + +[#boost_regex.sub_match.op_stream] + + template <class charT, class traits, class BidirectionalIterator> + basic_ostream<charT, traits>& + operator << (basic_ostream<charT, traits>& os + const sub_match<BidirectionalIterator>& m); + +[*Effects]: returns `(os << m.str())`. + +[endsect] + diff --git a/libs/regex/doc/syntax.qbk b/libs/regex/doc/syntax.qbk new file mode 100644 index 0000000000..ec3e318978 --- /dev/null +++ b/libs/regex/doc/syntax.qbk @@ -0,0 +1,33 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:syntax Regular Expression Syntax] + +This section covers the regular expression syntax used by this library, +this is a programmers guide, the actual syntax presented to your program's +users will depend upon the flags used during expression compilation. + +There are three main syntax options available, depending upon how you +construct the regular expression object: + +* [link boost_regex.syntax.perl_syntax Perl (this is the default behavior)]. +* [link boost_regex.syntax.basic_extended POSIX extended (including the egrep and awk variations)]. +* [link boost_regex.syntax.basic_syntax POSIX Basic (including the grep and emacs variations)]. + +You can also construct a regular expression that treats every character as a +literal, but that's not really a "syntax"! + +[include syntax_perl.qbk] +[include syntax_extended.qbk] +[include syntax_basic.qbk] +[include character_class_names.qbk] +[include collating_names.qbk] +[include leftmost_longest.qbk] + +[endsect] + diff --git a/libs/regex/doc/syntax_basic.qbk b/libs/regex/doc/syntax_basic.qbk new file mode 100644 index 0000000000..75f7ce5fb3 --- /dev/null +++ b/libs/regex/doc/syntax_basic.qbk @@ -0,0 +1,289 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:basic_syntax POSIX Basic Regular Expression Syntax] + +[h3 Synopsis] + +The POSIX-Basic regular expression syntax is used by the Unix utility `sed`, +and variations are used by `grep` and `emacs`. You can construct POSIX +basic regular expressions in Boost.Regex by passing the flag `basic` to the +regex constructor (see [syntax_option_type]), for example: + + // e1 is a case sensitive POSIX-Basic expression: + boost::regex e1(my_expression, boost::regex::basic); + // e2 a case insensitive POSIX-Basic expression: + boost::regex e2(my_expression, boost::regex::basic|boost::regex::icase); + +[#boost_regex.posix_basic][h3 POSIX Basic Syntax] + +In POSIX-Basic regular expressions, all characters are match themselves except +for the following special characters: + +[pre .\[\\*^$] + +[h4 Wildcard:] + +The single character '.' when used outside of a character set will match any +single character except: + +* The NULL character when the flag `match_no_dot_null` is passed to the +matching algorithms. +* The newline character when the flag `match_not_dot_newline` is passed to +the matching algorithms. + +[h4 Anchors:] + +A '^' character shall match the start of a line when used as the first +character of an expression, or the first character of a sub-expression. + +A '$' character shall match the end of a line when used as the last +character of an expression, or the last character of a sub-expression. + +[h4 Marked sub-expressions:] + +A section beginning `\(` and ending `\)` acts as a marked sub-expression. +Whatever matched the sub-expression is split out in a separate field by the +matching algorithms. Marked sub-expressions can also repeated, or +referred-to by a back-reference. + +[h4 Repeats:] + +Any atom (a single character, a marked sub-expression, or a character class) +can be repeated with the \* operator. + +For example `a*` will match any number of letter a's repeated zero or more +times (an atom repeated zero times matches an empty string), so the +expression `a*b` will match any of the following: + +[pre +b +ab +aaaaaaaab +] + +An atom can also be repeated with a bounded repeat: + +`a\{n\}` Matches 'a' repeated exactly n times. + +`a\{n,\}` Matches 'a' repeated n or more times. + +`a\{n, m\}` Matches 'a' repeated between n and m times inclusive. + +For example: + +[pre ^a\{2,3\}$] + +Will match either of: + +[pre +aa +aaa +] + +But neither of: + +[pre +a +aaaa +] + +It is an error to use a repeat operator, if the preceding construct can not be +repeated, for example: + +[pre a\(*\)] + +Will raise an error, as there is nothing for the \* operator to be applied to. + +[h4 Back references:] + +An escape character followed by a digit /n/, where /n/ is in the range 1-9, +matches the same string that was matched by sub-expression /n/. For example +the expression: + +[pre ^\\(a\*\\).\*\\1$] + +Will match the string: + +[pre aaabbaaa] + +But not the string: + +[pre aaabba] + +[h4 Character sets:] + +A character set is a bracket-expression starting with \[ and ending with \], +it defines a set of characters, and matches any single character that is a +member of that set. + +A bracket expression may contain any combination of the following: + +[h5 Single characters:] + +For example `[abc]`, will match any of the characters 'a', 'b', or 'c'. + +[h5 Character ranges:] + +For example `[a-c]` will match any single character in the range 'a' to 'c'. +By default, for POSIX-Basic regular expressions, a character /x/ is within the +range /y/ to /z/, if it collates within that range; this results in +locale specific behavior. This behavior can be turned off by unsetting +the `collate` option flag when constructing the regular expression +- in which case whether a character appears within +a range is determined by comparing the code points of the characters only. + +[h5 Negation:] + +If the bracket-expression begins with the ^ character, then it matches the +complement of the characters it contains, for example `[^a-c]` matches +any character that is not in the range a-c. + +[h5 Character classes:] + +An expression of the form `[[:name:]]` matches the named character class "name", +for example `[[:lower:]]` matches any lower case character. +See [link boost_regex.syntax.character_classes character class names]. + +[h5 Collating Elements:] + +An expression of the form `[[.col.]` matches the collating element /col/. +A collating element is any single character, or any sequence of +characters that collates as a single unit. Collating elements may also +be used as the end point of a range, for example: `[[.ae.]-c]` matches +the character sequence "ae", plus any single character in the rangle "ae"-c, +assuming that "ae" is treated as a single collating element in the current locale. + +Collating elements may be used in place of escapes (which are not +normally allowed inside character sets), for example `[[.^.]abc]` would +match either one of the characters 'abc^'. + +As an extension, a collating element may also be specified via its +symbolic name, for example: + +[pre \[\[\.NUL\.\]\]] + +matches a 'NUL' character. +See [link boost_regex.syntax.collating_names collating element names]. + +[h5 Equivalence classes:] + +An expression of theform `[[=col=]]`, matches any character or collating +element whose primary sort key is the same as that for collating element +/col/, as with collating elements the name /col/ may be a +[link boost_regex.syntax.collating_names collating symbolic name]. +A primary sort key is one that ignores case, accentation, or +locale-specific tailorings; so for example `[[=a=]]` matches any of +the characters: a, '''À''', '''Á''', '''Â''', +'''Ã''', '''Ä''', '''Å''', A, '''à''', '''á''', +'''â''', '''ã''', '''ä''' and '''å'''. +Unfortunately implementation of this is reliant on the platform's +collation and localisation support; this feature can not be relied +upon to work portably across all platforms, or even all locales on one platform. + +[h5 Combinations:] + +All of the above can be combined in one character set declaration, for +example: `[[:digit:]a-c[.NUL.]].` + +[h4 Escapes] + +With the exception of the escape sequences \\{, \\}, \\(, and \\), +which are documented above, an escape followed by any character matches +that character. This can be used to make the special characters + +[pre .\[\\\*^$] + +"ordinary". Note that the escape character loses its special meaning +inside a character set, so `[\^]` will match either a literal '\\' or a '^'. + +[h3 What Gets Matched] + +When there is more that one way to match a regular expression, the +"best" possible match is obtained using the +[link boost_regex.syntax.leftmost_longest_rule leftmost-longest rule]. + +[h3 Variations] + +[#boost_regex.grep_syntax][h4 Grep] + +When an expression is compiled with the flag `grep` set, then the +expression is treated as a newline separated list of +[link boost_regex.posix_basic POSIX-Basic expressions], +a match is found if any of the expressions in the list match, for example: + + boost::regex e("abc\ndef", boost::regex::grep); + +will match either of the [link boost_regex.posix_basic POSIX-Basic expressions] +"abc" or "def". + +As its name suggests, this behavior is consistent with the Unix utility grep. + +[h4 emacs] + +In addition to the [link boost_regex.posix_basic POSIX-Basic features] +the following characters are also special: + +[table +[[Character][Description]] +[[+][repeats the preceding atom one or more times.]] +[[?][repeats the preceding atom zero or one times.]] +[[*?][A non-greedy version of *.]] +[[+?][A non-greedy version of +.]] +[[??][A non-greedy version of ?.]] +] + +And the following escape sequences are also recognised: + +[table +[[Escape][Description]] +[[\\|][specifies an alternative.]] +[[\\(?: ... \)][is a non-marking grouping construct - allows you to lexically group something without spitting out an extra sub-expression.]] +[[\\w][matches any word character.]] +[[\\W][matches any non-word character.]] +[[\\sx][matches any character in the syntax group x, the following + emacs groupings are supported: 's', ' ', '_', 'w', '.', ')', '(', '"', '\\'', '>' and '<'. Refer to the emacs docs for details.]] +[[\\Sx][matches any character not in the syntax grouping x.]] +[[\\c and \\C][These are not supported.]] +[[\\`][matches zero characters only at the start of a buffer (or string being matched).]] +[[\\'][matches zero characters only at the end of a buffer (or string being matched).]] +[[\\b][matches zero characters at a word boundary.]] +[[\\B][matches zero characters, not at a word boundary.]] +[[\\<][matches zero characters only at the start of a word.]] +[[\\>][matches zero characters only at the end of a word.]] +] + +Finally, you should note that emacs style regular expressions are matched +according to the +[link boost_regex.syntax.perl_syntax.what_gets_matched Perl "depth first search" rules]. +Emacs expressions are +matched this way because they contain Perl-like extensions, that do not +interact well with the +[link boost_regex.syntax.leftmost_longest_rule POSIX-style leftmost-longest rule]. + +[h3 Options] + +There are a [link boost_regex.ref.syntax_option_type.syntax_option_type_basic variety of flags] that may be combined with the `basic` and `grep` +options when constructing the regular expression, in particular note +that the +[link boost_regex.ref.syntax_option_type.syntax_option_type_basic `newline_alt`, `no_char_classes`, `no-intervals`, `bk_plus_qm` +and `bk_plus_vbar`] options all alter the syntax, while the +[link boost_regex.ref.syntax_option_type.syntax_option_type_basic `collate` and `icase` options] modify how the case and locale sensitivity +are to be applied. + +[h3 References] + +[@http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap09.html IEEE Std 1003.1-2001, Portable Operating System Interface (POSIX ), Base Definitions and Headers, Section 9, Regular Expressions (FWD.1).] + +[@http://www.opengroup.org/onlinepubs/000095399/utilities/grep.html IEEE Std 1003.1-2001, Portable Operating System Interface (POSIX ), Shells and Utilities, Section 4, Utilities, grep (FWD.1).] + +[@http://www.gnu.org/software/emacs/ Emacs Version 21.3.] + +[endsect] + + diff --git a/libs/regex/doc/syntax_extended.qbk b/libs/regex/doc/syntax_extended.qbk new file mode 100644 index 0000000000..3548dba69d --- /dev/null +++ b/libs/regex/doc/syntax_extended.qbk @@ -0,0 +1,430 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:basic_extended POSIX Extended Regular Expression Syntax] + +[h3 Synopsis] + +The POSIX-Extended regular expression syntax is supported by the POSIX +C regular expression API's, and variations are used by the utilities +`egrep` and `awk`. You can construct POSIX extended regular expressions in +Boost.Regex by passing the flag `extended` to the regex constructor, for example: + + // e1 is a case sensitive POSIX-Extended expression: + boost::regex e1(my_expression, boost::regex::extended); + // e2 a case insensitive POSIX-Extended expression: + boost::regex e2(my_expression, boost::regex::extended|boost::regex::icase); + +[#boost_regex.posix_extended_syntax][h3 POSIX Extended Syntax] + +In POSIX-Extended regular expressions, all characters match themselves except for +the following special characters: + +[pre .\[{}()\\\*+?|^$] + +[h4 Wildcard:] + +The single character '.' when used outside of a character set will match +any single character except: + +* The NULL character when the flag `match_no_dot_null` is passed to the +matching algorithms. +* The newline character when the flag `match_not_dot_newline` is passed +to the matching algorithms. + +[h4 Anchors:] + +A '^' character shall match the start of a line when used as the first +character of an expression, or the first character of a sub-expression. + +A '$' character shall match the end of a line when used as the +last character of an expression, or the last character of a sub-expression. + +[h4 Marked sub-expressions:] + +A section beginning `(` and ending `)` acts as a marked sub-expression. +Whatever matched the sub-expression is split out in a separate field +by the matching algorithms. Marked sub-expressions can also repeated, +or referred to by a back-reference. + +[h4 Repeats:] + +Any atom (a single character, a marked sub-expression, or a character class) +can be repeated with the `*`, `+`, `?`, and `{}` operators. + +The `*` operator will match the preceding atom /zero or more times/, for +example the expression `a*b` will match any of the following: + +[pre +b +ab +aaaaaaaab +] + +The `+` operator will match the preceding atom /one or more times/, +for example the expression a+b will match any of the following: + +[pre +ab +aaaaaaaab +] + +But will not match: + +[pre +b +] + +The `?` operator will match the preceding atom /zero or one times/, for +example the expression `ca?b` will match any of the following: + +[pre +cb +cab +] +But will not match: + +[pre +caab +] + +An atom can also be repeated with a bounded repeat: + +`a{n}` Matches 'a' repeated /exactly n times/. + +`a{n,}` Matches 'a' repeated /n or more times/. + +`a{n, m}` Matches 'a' repeated /between n and m times inclusive/. + +For example: + +[pre ^a{2,3}\$] + +Will match either of: + + aa + aaa + +But neither of: + + a + aaaa + +It is an error to use a repeat operator, if the preceding construct can not +be repeated, for example: + + a(*) + +Will raise an error, as there is nothing for the `*` operator to be applied to. + +[h4 Back references:] + +An escape character followed by a digit /n/, where /n/ is in the range 1-9, +matches the same string that was matched by sub-expression /n/. For example +the expression: + +[pre ^(a\*).\*\\1\$] + +Will match the string: + + aaabbaaa + +But not the string: + + aaabba + +[caution The POSIX standard does not support back-references for "extended" +regular expressions, this is a compatible extension to that standard.] + +[h4 Alternation] + +The `|` operator will match either of its arguments, so for example: +`abc|def` will match either "abc" or "def". + +Parenthesis can be used to group alternations, for example: `ab(d|ef)` +will match either of "abd" or "abef". + +[h4 Character sets:] + +A character set is a bracket-expression starting with \[ and ending with \], +it defines a set of characters, and matches any single character that is +a member of that set. + +A bracket expression may contain any combination of the following: + +[h5 Single characters:] + +For example `[abc]`, will match any of the characters 'a', 'b', or 'c'. + +[h5 Character ranges:] + +For example `[a-c]` will match any single character in the range 'a' to 'c'. +By default, for POSIX-Extended regular expressions, a character /x/ is +within the range /y/ to /z/, if it collates within that range; this +results in locale specific behavior . This behavior can be turned +off by unsetting the `collate` +[link boost_regex.ref.syntax_option_type option flag] - in which case whether +a character appears within a range is determined by comparing the code +points of the characters only. + +[h5 Negation:] + +If the bracket-expression begins with the ^ character, then it matches the +complement of the characters it contains, for example `[^a-c]` matches +any character that is not in the range `a-c`. + +[h5 Character classes:] + +An expression of the form `[[:name:]]` matches the named character class "name", +for example `[[:lower:]]` matches any lower case character. +See [link boost_regex.syntax.character_classes character class names]. + +[h5 Collating Elements:] + +An expression of the form `[[.col.]` matches the collating element /col/. +A collating element is any single character, or any sequence of +characters that collates as a single unit. Collating elements may +also be used as the end point of a range, for example: `[[.ae.]-c]` +matches the character sequence "ae", plus any single character +in the range "ae"-c, assuming that "ae" is treated as a single +collating element in the current locale. + +Collating elements may be used in place of escapes (which are not +normally allowed inside character sets), for example `[[.^.]abc]` +would match either one of the characters 'abc^'. + +As an extension, a collating element may also be specified via its +[link boost_regex.syntax.collating_names symbolic name], for example: + + [[.NUL.]] + +matches a NUL character. + +[h5 Equivalence classes:] + +An expression of the form `[[=col=]]`, matches any character or collating element +whose primary sort key is the same as that for collating element /col/, +as with colating elements the name /col/ may be a +[link boost_regex.syntax.collating_names symbolic name]. A primary +sort key is one that ignores case, accentation, or locale-specific tailorings; +so for example `[[=a=]]` matches any of the characters: +a, '''À''', '''Á''', '''Â''', +'''Ã''', '''Ä''', '''Å''', A, '''à''', '''á''', +'''â''', '''ã''', '''ä''' and '''å'''. +Unfortunately implementation of this is reliant on the platform's +collation and localisation support; this feature can not be relied +upon to work portably across all platforms, or even all locales on one platform. + +[h5 Combinations:] + +All of the above can be combined in one character set declaration, +for example: `[[:digit:]a-c[.NUL.]]`. + +[h4 Escapes] + +The POSIX standard defines no escape sequences for POSIX-Extended +regular expressions, except that: + +* Any special character preceded by an escape shall match itself. +* The effect of any ordinary character being preceded by an escape is undefined. +* An escape inside a character class declaration shall match itself: in +other words the escape character is not "special" inside a character +class declaration; so `[\^]` will match either a literal '\\' or a '^'. + +However, that's rather restrictive, so the following standard-compatible +extensions are also supported by Boost.Regex: + +[h5 Escapes matching a specific character] + +The following escape sequences are all synonyms for single characters: + +[table +[[Escape][Character]] +[[\\a]['\\a']] +[[\\e][0x1B]] +[[\\f][\\f]] +[[\\n][\\n]] +[[\\r][\\r]] +[[\\t][\\t]] +[[\\v][\\v]] +[[\\b][\\b (but only inside a character class declaration).]] +[[\\cX][An ASCII escape sequence - the character whose code point is X % 32]] +[[\\xdd][A hexadecimal escape sequence - matches the single character whose code point is 0xdd.]] +[[\\x{dddd}][A hexadecimal escape sequence - matches the single character whose code point is 0xdddd.]] +[[\\0ddd][An octal escape sequence - matches the single character whose code point is 0ddd.]] +[[\\N{Name}][Matches the single character which has the symbolic name name. For example `\\N{newline}` matches the single character \\n.]] +] + +[h5 "Single character" character classes:] + +Any escaped character /x/, if /x/ is the name of a character class shall +match any character that is a member of that class, and any +escaped character /X/, if /x/ is the name of a character class, +shall match any character not in that class. + +The following are supported by default: + +[table +[[Escape sequence][Equivalent to]] +[[`\d`][`[[:digit:]]`]] +[[`\l`][`[[:lower:]]`]] +[[`\s`][`[[:space:]]`]] +[[`\u`][`[[:upper:]]`]] +[[`\w`][`[[:word:]]`]] +[[`\D`][`[^[:digit:]]`]] +[[`\L`][`[^[:lower:]]`]] +[[`\S`][`[^[:space:]]`]] +[[`\U`][`[^[:upper:]]`]] +[[`\W`][`[^[:word:]]`]] +] + +[h5 Character Properties] + +The character property names in the following table are all equivalent to the +names used in character classes. + +[table +[[Form][Description][Equivalent character set form]] +[[`\pX`][Matches any character that has the property X.][`[[:X:]]`]] +[[`\p{Name}`][Matches any character that has the property Name.][`[[:Name:]]`]] +[[`\PX`][Matches any character that does not have the property X.][`[^[:X:]]`]] +[[`\P{Name}`][Matches any character that does not have the property Name.][`[^[:Name:]]`]] +] + +For example `\pd` matches any "digit" character, as does `\p{digit}`. + +[h5 Word Boundaries] + +The following escape sequences match the boundaries of words: + +[table +[[Escape][Meaning]] +[[`\<`][Matches the start of a word.]] +[[`\>`][Matches the end of a word.]] +[[`\b`][Matches a word boundary (the start or end of a word).]] +[[`\B`][Matches only when not at a word boundary.]] +] + +[h5 Buffer boundaries] + +The following match only at buffer boundaries: a "buffer" in this +context is the whole of the input text that is being matched against +(note that ^ and $ may match embedded newlines within the text). + +[table +[[Escape][Meaning]] +[[\\\`][Matches at the start of a buffer only.]] +[[\\'][Matches at the end of a buffer only.]] +[[`\A`][Matches at the start of a buffer only (the same as \\\`).]] +[[`\z`][Matches at the end of a buffer only (the same as \\').]] +[[`\Z`][Matches an optional sequence of newlines at the end of a buffer: +equivalent to the regular expression `\n*\z`]] +] + +[h5 Continuation Escape] + +The sequence `\G` matches only at the end of the last match found, or at +the start of the text being matched if no previous match was found. +This escape useful if you're iterating over the matches contained within +a text, and you want each subsequence match to start where the last one ended. + +[h5 Quoting escape] + +The escape sequence `\Q` begins a "quoted sequence": all the subsequent +characters are treated as literals, until either the end of the +regular expression or `\E` is found. For example the expression: `\Q\*+\Ea+` +would match either of: + + \*+a + \*+aaa + +[h5 Unicode escapes] + +[table +[[Escape][Meaning]] +[[`\C`][Matches a single code point: in Boost regex this has exactly the same effect as a "." operator.]] +[[`\X`][Matches a combining character sequence: that is any non-combining character followed by a sequence of zero or more combining characters.]] +] + +[h5 Any other escape] + +Any other escape sequence matches the character that is escaped, +for example \\@ matches a literal '@'. + +[h4 Operator precedence] + +The order of precedence for of operators is as follows: + +# Collation-related bracket symbols `[==] [::] [..]` +# Escaped characters `\` +# Character set (bracket expression) `[]` +# Grouping `()` +# Single-character-ERE duplication `* + ? {m,n}` +# Concatenation +# Anchoring ^$ +# Alternation `|` + +[h4 What Gets Matched] + +When there is more that one way to match a regular expression, the +"best" possible match is obtained using the +[link boost_regex.syntax.leftmost_longest_rule leftmost-longest rule]. + +[h3 Variations] + +[h4 Egrep] + +When an expression is compiled with the +[link boost_regex.ref.syntax_option_type flag `egrep`] set, then the +expression is treated as a newline separated list of +[link boost_regex.posix_extended_syntax POSIX-Extended expressions], +a match is found if any of the +expressions in the list match, for example: + + boost::regex e("abc\ndef", boost::regex::egrep); + +will match either of the POSIX-Basic expressions "abc" or "def". + +As its name suggests, this behavior is consistent with the Unix utility `egrep`, +and with grep when used with the -E option. + +[h4 awk] + +In addition to the +[link boost_regex.posix_extended_syntax POSIX-Extended features] the +escape character is +special inside a character class declaration. + +In addition, some escape sequences that are not defined as part of +POSIX-Extended specification are required to be supported - however Boost.Regex +supports these by default anyway. + +[h3 Options] + +There are a [link boost_regex.ref.syntax_option_type.syntax_option_type_extended variety of flags] +that may be combined with the `extended` and `egrep` options when +constructing the regular expression, in particular note that the +[link boost_regex.ref.syntax_option_type.syntax_option_type_extended `newline_alt`] +option alters the syntax, while the +[link boost_regex.ref.syntax_option_type.syntax_option_type_extended `collate`, `nosubs` +and `icase` options] modify how the case and locale sensitivity are to be applied. + +[h3 References] + +[@http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap09.html +IEEE Std 1003.1-2001, Portable Operating System Interface (POSIX ), Base Definitions and Headers, Section 9, Regular Expressions.] + +[@http://www.opengroup.org/onlinepubs/000095399/utilities/grep.html +IEEE Std 1003.1-2001, Portable Operating System Interface (POSIX ), Shells and Utilities, Section 4, Utilities, egrep.] + +[@http://www.opengroup.org/onlinepubs/000095399/utilities/awk.html +IEEE Std 1003.1-2001, Portable Operating System Interface (POSIX ), Shells and Utilities, Section 4, Utilities, awk.] + +[endsect] + + diff --git a/libs/regex/doc/syntax_option_type.qbk b/libs/regex/doc/syntax_option_type.qbk new file mode 100644 index 0000000000..41036dbbe5 --- /dev/null +++ b/libs/regex/doc/syntax_option_type.qbk @@ -0,0 +1,336 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:syntax_option_type syntax_option_type] + +[section:syntax_option_type_synopsis syntax_option_type Synopsis] + +Type [syntax_option_type] is an implementation specific bitmask type +that controls how a regular expression string is to be interpreted. +For convenience note that all the constants listed here, are also +duplicated within the scope of class template [basic_regex]. + + namespace std{ namespace regex_constants{ + + typedef implementation-specific-bitmask-type syntax_option_type; + + // these flags are standardized: + static const syntax_option_type normal; + static const syntax_option_type ECMAScript = normal; + static const syntax_option_type JavaScript = normal; + static const syntax_option_type JScript = normal; + static const syntax_option_type perl = normal; + static const syntax_option_type basic; + static const syntax_option_type sed = basic; + static const syntax_option_type extended; + static const syntax_option_type awk; + static const syntax_option_type grep; + static const syntax_option_type egrep; + static const syntax_option_type icase; + static const syntax_option_type nosubs; + static const syntax_option_type optimize; + static const syntax_option_type collate; + + // + // The remaining options are specific to Boost.Regex: + // + + // Options common to both Perl and POSIX regular expressions: + static const syntax_option_type newline_alt; + static const syntax_option_type no_except; + static const syntax_option_type save_subexpression_location; + + // Perl specific options: + static const syntax_option_type no_mod_m; + static const syntax_option_type no_mod_s; + static const syntax_option_type mod_s; + static const syntax_option_type mod_x; + static const syntax_option_type no_empty_expressions; + + // POSIX extended specific options: + static const syntax_option_type no_escape_in_lists; + static const syntax_option_type no_bk_refs; + + // POSIX basic specific options: + static const syntax_option_type no_escape_in_lists; + static const syntax_option_type no_char_classes; + static const syntax_option_type no_intervals; + static const syntax_option_type bk_plus_qm; + static const syntax_option_type bk_vbar; + + } // namespace regex_constants + } // namespace std + +[endsect] + +[section:syntax_option_type_overview Overview of syntax_option_type] + +The type [syntax_option_type] is an implementation specific bitmask type +(see C++ standard 17.3.2.1.2). Setting its elements has the effects listed +in the table below, a valid value of type [syntax_option_type] will always +have exactly one of the elements `normal`, `basic`, `extended`, +`awk`, `grep`, `egrep`, `sed`, `literal` or `perl` set. + +Note that for convenience all the constants listed here are duplicated within +the scope of class template [basic_regex], so you can use any of: + + boost::regex_constants::constant_name + +or + + boost::regex::constant_name + +or + + boost::wregex::constant_name + +in an interchangeable manner. + +[endsect] + +[section:syntax_option_type_perl Options for Perl Regular Expressions] + +One of the following must always be set for perl regular expressions: + +[table +[[Element][Standardized][Effect when set]] +[[ECMAScript][Yes][Specifies that the grammar recognized by the regular + expression engine uses its normal semantics: that is the same as + that given in the ECMA-262, ECMAScript Language Specification, + Chapter 15 part 10, RegExp (Regular Expression) Objects (FWD.1). + + This is functionally identical to the + [link boost_regex.syntax.perl_syntax Perl regular expression syntax]. + + Boost.Regex also recognizes all of the perl-compatible `(?...)` + extensions in this mode.]] +[[perl][No][As above.]] +[[normal][No][As above.]] +[[JavaScript][No][As above.]] +[[JScript][No][As above.]] +] + +The following options may also be set when using perl-style regular expressions: + +[table +[[Element][Standardized][Effect when set]] +[[icase][Yes][Specifies that matching of regular expressions against a + character container sequence shall be performed without regard to case.]] +[[nosubs][Yes][Specifies that when a regular expression is matched against + a character container sequence, then no sub-expression matches are + to be stored in the supplied [match_results] structure.]] +[[optimize][Yes][Specifies that the regular expression engine should pay + more attention to the speed with which regular expressions are matched, + and less to the speed with which regular expression objects are + constructed. Otherwise it has no detectable effect on the program output. + This currently has no effect for Boost.Regex.]] +[[collate][Yes][Specifies that character ranges of the form `[a-b]` should be + locale sensitive.]] +[[newline_alt][No][Specifies that the \\n character has the same effect as + the alternation operator |. Allows newline separated lists to be + used as a list of alternatives.]] +[[no_except][No][Prevents [basic_regex] from throwing an exception when an + invalid expression is encountered.]] +[[no_mod_m][No][Normally Boost.Regex behaves as if the Perl m-modifier is on: + so the assertions ^ and $ match after and before embedded + newlines respectively, setting this flags is equivalent to prefixing + the expression with (?-m).]] +[[no_mod_s][No][Normally whether Boost.Regex will match "." against a + newline character is determined by the match flag `match_dot_not_newline`. + Specifying this flag is equivalent to prefixing the expression with `(?-s)` + and therefore causes "." not to match a newline character regardless of + whether `match_not_dot_newline` is set in the match flags.]] +[[mod_s][No][Normally whether Boost.Regex will match "." against a newline + character is determined by the match flag `match_dot_not_newline`. + Specifying this flag is equivalent to prefixing the expression with `(?s)` + and therefore causes "." to match a newline character regardless of + whether `match_not_dot_newline` is set in the match flags.]] +[[mod_x][No][Turns on the perl x-modifier: causes unescaped whitespace + in the expression to be ignored.]] +[[no_empty_expressions][No][When set then empty expressions/alternatives are prohibited.]] +[[save_subexpression_location][No][When set then the locations of individual +sub-expressions within the ['original regular expression string] can be accessed +via the [link boost_regex.basic_regex.subexpression `subexpression()`] member function of `basic_regex`.]] +] + +[endsect] + +[section:syntax_option_type_extended Options for POSIX Extended Regular Expressions] + +Exactly one of the following must always be set for +[link boost_regex.syntax.basic_extended POSIX extended +regular expressions]: + +[table +[[Element][Standardized][Effect when set]] +[[extended][Yes][Specifies that the grammar recognized by the regular + expression engine is the same as that used by POSIX extended regular + expressions in IEEE Std 1003.1-2001, Portable Operating System Interface + (POSIX ), Base Definitions and Headers, Section 9, Regular Expressions (FWD.1). + + Refer to the [link boost_regex.syntax.basic_extended POSIX extended + regular expression guide] for more information. + + In addition some perl-style escape sequences are supported + (The POSIX standard specifies that only "special" characters may be + escaped, all other escape sequences result in undefined behavior).]] +[[egrep][Yes][Specifies that the grammar recognized by the regular expression + engine is the same as that used by POSIX utility grep when given the + -E option in IEEE Std 1003.1-2001, Portable Operating System + Interface (POSIX ), Shells and Utilities, Section 4, Utilities, grep (FWD.1). + + That is to say, the same as [link boost_regex.syntax.basic_extended + POSIX extended syntax], but with the newline character acting as an + alternation character in addition to "|".]] +[[awk][Yes][Specifies that the grammar recognized by the regular + expression engine is the same as that used by POSIX utility awk + in IEEE Std 1003.1-2001, Portable Operating System Interface (POSIX ), + Shells and Utilities, Section 4, awk (FWD.1). + + That is to say: the same as [link boost_regex.syntax.basic_extended + POSIX extended syntax], but with escape sequences in character + classes permitted. + + In addition some perl-style escape sequences are supported (actually + the awk syntax only requires \\a \\b \\t \\v \\f \\n and \\r to be + recognised, all other Perl-style escape sequences invoke undefined + behavior according to the POSIX standard, but are in fact + recognised by Boost.Regex).]] +] + +The following options may also be set when using POSIX extended regular expressions: + +[table +[[Element][Standardized][Effect when set]] +[[icase][Yes][Specifies that matching of regular expressions against a + character container sequence shall be performed without regard to case.]] +[[nosubs][Yes][Specifies that when a regular expression is matched against a + character container sequence, then no sub-expression matches are + to be stored in the supplied [match_results] structure.]] +[[optimize][Yes][Specifies that the regular expression engine should pay + more attention to the speed with which regular expressions are matched, + and less to the speed with which regular expression objects are + constructed. Otherwise it has no detectable effect on the program output. + This currently has no effect for Boost.Regex.]] +[[collate][Yes][Specifies that character ranges of the form `[a-b]` should be + locale sensitive. This bit is on by default for POSIX-Extended + regular expressions, but can be unset to force ranges to be compared + by code point only.]] +[[newline_alt][No][Specifies that the \\n character has the same effect as + the alternation operator |. Allows newline separated lists to be used + as a list of alternatives.]] +[[no_escape_in_lists][No][When set this makes the escape character ordinary + inside lists, so that `[\b]` would match either '\\' or 'b'. This bit + is on by default for POSIX-Extended regular expressions, but can be + unset to force escapes to be recognised inside lists.]] +[[no_bk_refs][No][When set then backreferences are disabled. This bit is on + by default for POSIX-Extended regular expressions, but can be unset + to support for backreferences on.]] +[[no_except][No][Prevents [basic_regex] from throwing an exception when + an invalid expression is encountered.]] +[[save_subexpression_location][No][When set then the locations of individual +sub-expressions within the ['original regular expression string] can be accessed +via the [link boost_regex.basic_regex.subexpression `subexpression()`] member function of `basic_regex`.]] +] + +[endsect] +[section:syntax_option_type_basic Options for POSIX Basic Regular Expressions] + +Exactly one of the following must always be set for POSIX basic regular expressions: + +[table +[[Element][Standardized][Effect When Set]] +[[basic][Yes][Specifies that the grammar recognized by the regular expression + engine is the same as that used by + [link boost_regex.syntax.basic_syntax POSIX basic regular expressions] in IEEE Std 1003.1-2001, Portable + Operating System Interface (POSIX ), Base Definitions and Headers, + Section 9, Regular Expressions (FWD.1).]] +[[sed][No][As Above.]] +[[grep][Yes][Specifies that the grammar recognized by the regular + expression engine is the same as that used by + POSIX utility `grep` in IEEE Std 1003.1-2001, Portable Operating + System Interface (POSIX ), Shells and Utilities, Section 4, + Utilit\ies, grep (FWD.1). + + That is to say, the same as [link boost_regex.syntax.basic_syntax + POSIX basic syntax], but with the newline character acting as an + alternation character; the expression is treated as a newline + separated list of alternatives.]] +[[emacs][No][Specifies that the grammar recognised is the superset of the + [link boost_regex.syntax.basic_syntax POSIX-Basic syntax] used by + the emacs program.]] +] + +The following options may also be set when using POSIX basic regular expressions: + +[table +[[Element][Standardized][Effect when set]] +[[icase][Yes][Specifies that matching of regular expressions against a + character container sequence shall be performed without regard to case.]] +[[nosubs][Yes][Specifies that when a regular expression is matched against + a character container sequence, then no sub-expression matches are + to be stored in the supplied [match_results] structure.]] +[[optimize][Yes][Specifies that the regular expression engine should pay + more attention to the speed with which regular expressions are + matched, and less to the speed with which regular expression objects + are constructed. Otherwise it has no detectable effect on the program output. + This currently has no effect for Boost.Regex.]] +[[collate][Yes][Specifies that character ranges of the form `[a-b]` should + be locale sensitive. This bit is on by default for + [link boost_regex.syntax.basic_syntax POSIX-Basic regular expressions], + but can be unset to force ranges to be compared by code point only.]] +[[newline_alt][No][Specifies that the \\n character has the same effect as the + alternation operator |. Allows newline separated lists to be used + as a list of alternatives. This bit is already set, if you use the + `grep` option.]] +[[no_char_classes][No][When set then character classes such as `[[:alnum:]]` + are not allowed.]] +[[no_escape_in_lists][No][When set this makes the escape character ordinary + inside lists, so that `[\b]` would match either '\\' or 'b'. This bit + is on by default for [link boost_regex.syntax.basic_syntax POSIX-basic + regular expressions], but can be unset to force escapes to be recognised + inside lists.]] +[[no_intervals][No][When set then bounded repeats such as a{2,3} are not permitted.]] +[[bk_plus_qm][No][When set then `\?` acts as a zero-or-one repeat operator, + and `\+` acts as a one-or-more repeat operator.]] +[[bk_vbar][No][When set then `\|` acts as the alternation operator.]] +[[no_except][No][Prevents [basic_regex] from throwing an exception when an + invalid expression is encountered.]] +[[save_subexpression_location][No][When set then the locations of individual +sub-expressions within the ['original regular expression string] can be accessed +via the [link boost_regex.basic_regex.subexpression `subexpression()`] member function of `basic_regex`.]] +] + +[endsect] + +[section:syntax_option_type_literal Options for Literal Strings] + +The following must always be set to interpret the expression as a string literal: + +[table +[[Element][Standardized][Effect when set]] +[[literal][Yes][Treat the string as a literal (no special characters).]] +] + +The following options may also be combined with the literal flag: + +[table +[[Element][Standardized][Effect when set]] +[[icase][Yes][Specifies that matching of regular expressions against a + character container sequence shall be performed without regard to case.]] +[[optimize][Yes][Specifies that the regular expression engine should pay + more attention to the speed with which regular expressions are matched, + and less to the speed with which regular expression objects are constructed. + Otherwise it has no detectable effect on the program output. This + currently has no effect for Boost.Regex.]] +] + +[endsect] + +[endsect] + diff --git a/libs/regex/doc/syntax_perl.qbk b/libs/regex/doc/syntax_perl.qbk new file mode 100644 index 0000000000..21d873b690 --- /dev/null +++ b/libs/regex/doc/syntax_perl.qbk @@ -0,0 +1,625 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:perl_syntax Perl Regular Expression Syntax] + +[h3 Synopsis] + +The Perl regular expression syntax is based on that used by the +programming language Perl . Perl regular expressions are the +default behavior in Boost.Regex or you can pass the flag =perl= to the +[basic_regex] constructor, for example: + + // e1 is a case sensitive Perl regular expression: + // since Perl is the default option there's no need to explicitly specify the syntax used here: + boost::regex e1(my_expression); + // e2 a case insensitive Perl regular expression: + boost::regex e2(my_expression, boost::regex::perl|boost::regex::icase); + +[h3 Perl Regular Expression Syntax] + +In Perl regular expressions, all characters match themselves except for the +following special characters: + +[pre .\[{}()\\\*+?|^$] + +[h4 Wildcard] + +The single character '.' when used outside of a character set will match +any single character except: + +* The NULL character when the [link boost_regex.ref.match_flag_type flag + =match_not_dot_null=] is passed to the matching algorithms. +* The newline character when the [link boost_regex.ref.match_flag_type + flag =match_not_dot_newline=] is passed to + the matching algorithms. + +[h4 Anchors] + +A '^' character shall match the start of a line. + +A '$' character shall match the end of a line. + +[h4 Marked sub-expressions] + +A section beginning =(= and ending =)= acts as a marked sub-expression. +Whatever matched the sub-expression is split out in a separate field by +the matching algorithms. Marked sub-expressions can also repeated, or +referred to by a back-reference. + +[h4 Non-marking grouping] + +A marked sub-expression is useful to lexically group part of a regular +expression, but has the side-effect of spitting out an extra field in +the result. As an alternative you can lexically group part of a +regular expression, without generating a marked sub-expression by using +=(?:= and =)= , for example =(?:ab)+= will repeat =ab= without splitting +out any separate sub-expressions. + +[h4 Repeats] + +Any atom (a single character, a marked sub-expression, or a character class) +can be repeated with the =*=, =+=, =?=, and ={}= operators. + +The =*= operator will match the preceding atom zero or more times, +for example the expression =a*b= will match any of the following: + + b + ab + aaaaaaaab + +The =+= operator will match the preceding atom one or more times, for +example the expression =a+b= will match any of the following: + + ab + aaaaaaaab + +But will not match: + + b + +The =?= operator will match the preceding atom zero or one times, for +example the expression ca?b will match any of the following: + + cb + cab + +But will not match: + + caab + +An atom can also be repeated with a bounded repeat: + +=a{n}= Matches 'a' repeated exactly n times. + +=a{n,}= Matches 'a' repeated n or more times. + +=a{n, m}= Matches 'a' repeated between n and m times inclusive. + +For example: + +[pre ^a{2,3}$] + +Will match either of: + + aa + aaa + +But neither of: + + a + aaaa + +It is an error to use a repeat operator, if the preceding construct can not +be repeated, for example: + + a(*) + +Will raise an error, as there is nothing for the =*= operator to be applied to. + +[h4 Non greedy repeats] + +The normal repeat operators are "greedy", that is to say they will consume as +much input as possible. There are non-greedy versions available that will +consume as little input as possible while still producing a match. + +=*?= Matches the previous atom zero or more times, while consuming as little + input as possible. + +=+?= Matches the previous atom one or more times, while consuming as + little input as possible. + +=??= Matches the previous atom zero or one times, while consuming + as little input as possible. + +={n,}?= Matches the previous atom n or more times, while consuming as + little input as possible. + +={n,m}?= Matches the previous atom between n and m times, while + consuming as little input as possible. + +[h4 Possessive repeats] + +By default when a repeated pattern does not match then the engine will backtrack until +a match is found. However, this behaviour can sometime be undesireable so there are +also "possessive" repeats: these match as much as possible and do not then allow +backtracking if the rest of the expression fails to match. + +=*+= Matches the previous atom zero or more times, while giving nothing back. + +=++= Matches the previous atom one or more times, while giving nothing back. + +=?+= Matches the previous atom zero or one times, while giving nothing back. + +={n,}+= Matches the previous atom n or more times, while giving nothing back. + +={n,m}+= Matches the previous atom between n and m times, while giving nothing back. + +[h4 Back references] + +An escape character followed by a digit /n/, where /n/ is in the range 1-9, +matches the same string that was matched by sub-expression /n/. For example +the expression: + +[pre ^(a\*).\*\\1$] + +Will match the string: + + aaabbaaa + +But not the string: + + aaabba + +You can also use the \g escape for the same function, for example: + +[table +[[Escape][Meaning]] +[[=\g1=][Match whatever matched sub-expression 1]] +[[=\g{1}=][Match whatever matched sub-expression 1: this form allows for safer + parsing of the expression in cases like =\g{1}2= or for indexes higher than 9 as in =\g{1234}=]] +[[=\g-1=][Match whatever matched the last opened sub-expression]] +[[=\g{-2}=][Match whatever matched the last but one opened sub-expression]] +[[=\g{one}=][Match whatever matched the sub-expression named "one"]] +] + +Finally the \k escape can be used to refer to named subexpressions, for example [^\k<two>] will match +whatever matched the subexpression named "two". + +[h4 Alternation] + +The =|= operator will match either of its arguments, so for example: +=abc|def= will match either "abc" or "def". + +Parenthesis can be used to group alternations, for example: =ab(d|ef)= +will match either of "abd" or "abef". + +Empty alternatives are not allowed (these are almost always a mistake), but +if you really want an empty alternative use =(?:)= as a placeholder, for example: + +=|abc= is not a valid expression, but + +=(?:)|abc= is and is equivalent, also the expression: + +=(?:abc)??= has exactly the same effect. + +[h4 Character sets] + +A character set is a bracket-expression starting with =[= and ending with =]=, +it defines a set of characters, and matches any single character that is a +member of that set. + +A bracket expression may contain any combination of the following: + +[h5 Single characters] + +For example =[abc]=, will match any of the characters 'a', 'b', or 'c'. + +[h5 Character ranges] + +For example =[a-c]= will match any single character in the range 'a' to 'c'. +By default, for Perl regular expressions, a character x is within the +range y to z, if the code point of the character lies within the codepoints of +the endpoints of the range. Alternatively, if you set the +[link boost_regex.ref.syntax_option_type.syntax_option_type_perl =collate= flag] +when constructing the regular expression, then ranges are locale sensitive. + +[h5 Negation] + +If the bracket-expression begins with the ^ character, then it matches the +complement of the characters it contains, for example =[^a-c]= matches +any character that is not in the range =a-c=. + +[h5 Character classes] + +An expression of the form [^\[\[:name:\]\]] matches the named character class +"name", for example [^\[\[:lower:\]\]] matches any lower case character. +See [link boost_regex.syntax.character_classes character class names]. + +[h5 Collating Elements] + +An expression of the form [^\[\[.col.\]\]] matches the collating element /col/. +A collating element is any single character, or any sequence of characters +that collates as a single unit. Collating elements may also be used +as the end point of a range, for example: [^\[\[.ae.\]-c\]] matches the +character sequence "ae", plus any single character in the range "ae"-c, +assuming that "ae" is treated as a single collating element in the current locale. + +As an extension, a collating element may also be specified via it's +[link boost_regex.syntax.collating_names symbolic name], for example: + + [[.NUL.]] + +matches a =\0= character. + +[h5 Equivalence classes] + +An expression of the form [^\[\[\=col\=\]\]], matches any character or collating element +whose primary sort key is the same as that for collating element /col/, as with +collating elements the name /col/ may be a +[link boost_regex.syntax.collating_names symbolic name]. A primary sort key is +one that ignores case, accentation, or locale-specific tailorings; so for +example `[[=a=]]` matches any of the characters: +a, '''À''', '''Á''', '''Â''', +'''Ã''', '''Ä''', '''Å''', A, '''à''', '''á''', +'''â''', '''ã''', '''ä''' and '''å'''. +Unfortunately implementation of this is reliant on the platform's collation +and localisation support; this feature can not be relied upon to work portably +across all platforms, or even all locales on one platform. + +[h5 Escaped Characters] + +All the escape sequences that match a single character, or a single character +class are permitted within a character class definition. For example +`[\[\]]` would match either of `[` or `]` while `[\W\d]` would match any character +that is either a "digit", /or/ is /not/ a "word" character. + +[h5 Combinations] + +All of the above can be combined in one character set declaration, for example: +[^\[\[:digit:\]a-c\[.NUL.\]\]]. + +[h4 Escapes] + +Any special character preceded by an escape shall match itself. + +The following escape sequences are all synonyms for single characters: + +[table +[[Escape][Character]] +[[=\a=][=\a=]] +[[=\e=][=0x1B=]] +[[=\f=][=\f=]] +[[=\n=][=\n=]] +[[=\r=][=\r=]] +[[=\t=][=\t=]] +[[=\v=][=\v=]] +[[=\b=][=\b= (but only inside a character class declaration).]] +[[=\cX=][An ASCII escape sequence - the character whose code point is X % 32]] +[[=\xdd=][A hexadecimal escape sequence - matches the single character whose + code point is 0xdd.]] +[[=\x{dddd}=][A hexadecimal escape sequence - matches the single character whose + code point is 0xdddd.]] +[[=\0ddd=][An octal escape sequence - matches the single character whose + code point is 0ddd.]] +[[=\N{name}=][Matches the single character which has the + [link boost_regex.syntax.collating_names symbolic name] /name/. + For example =\N{newline}= matches the single character \\n.]] +] + +[h5 "Single character" character classes:] + +Any escaped character /x/, if /x/ is the name of a character class shall +match any character that is a member of that class, and any +escaped character /X/, if /x/ is the name of a character class, shall +match any character not in that class. + +The following are supported by default: + +[table +[[Escape sequence][Equivalent to]] +[[`\d`][`[[:digit:]]`]] +[[`\l`][`[[:lower:]]`]] +[[`\s`][`[[:space:]]`]] +[[`\u`][`[[:upper:]]`]] +[[`\w`][`[[:word:]]`]] +[[`\h`][Horizontal whitespace]] +[[`\v`][Vertical whitespace]] +[[`\D`][`[^[:digit:]]`]] +[[`\L`][`[^[:lower:]]`]] +[[`\S`][`[^[:space:]]`]] +[[`\U`][`[^[:upper:]]`]] +[[`\W`][`[^[:word:]]`]] +[[`\H`][Not Horizontal whitespace]] +[[`\V`][Not Vertical whitespace]] +] + +[h5 Character Properties] + +The character property names in the following table are all equivalent +to the [link boost_regex.syntax.character_classes names used in character classes]. + +[table +[[Form][Description][Equivalent character set form]] +[[`\pX`][Matches any character that has the property X.][`[[:X:]]`]] +[[`\p{Name}`][Matches any character that has the property Name.][`[[:Name:]]`]] +[[`\PX`][Matches any character that does not have the property X.][`[^[:X:]]`]] +[[`\P{Name}`][Matches any character that does not have the property Name.][`[^[:Name:]]`]] +] + +For example =\pd= matches any "digit" character, as does =\p{digit}=. + +[h5 Word Boundaries] + +The following escape sequences match the boundaries of words: + +=\<= Matches the start of a word. + +=\>= Matches the end of a word. + +=\b= Matches a word boundary (the start or end of a word). + +=\B= Matches only when not at a word boundary. + +[h5 Buffer boundaries] + +The following match only at buffer boundaries: a "buffer" in this +context is the whole of the input text that is being matched against +(note that ^ and $ may match embedded newlines within the text). + +\\\` Matches at the start of a buffer only. + +\\' Matches at the end of a buffer only. + +\\A Matches at the start of a buffer only (the same as =\\\`=). + +\\z Matches at the end of a buffer only (the same as =\\'=). + +\\Z Matches a zero-width assertion consisting of an optional sequence of newlines at the end of a buffer: +equivalent to the regular expression [^(?=\\v*\\z)]. Note that this is subtly different from Perl which +behaves as if matching [^(?=\\n?\\z)]. + +[h5 Continuation Escape] + +The sequence =\G= matches only at the end of the last match found, or at +the start of the text being matched if no previous match was found. +This escape useful if you're iterating over the matches contained within a +text, and you want each subsequence match to start where the last one ended. + +[h5 Quoting escape] + +The escape sequence =\Q= begins a "quoted sequence": all the subsequent characters +are treated as literals, until either the end of the regular expression or \\E +is found. For example the expression: =\Q\*+\Ea+= would match either of: + + \*+a + \*+aaa + +[h5 Unicode escapes] + +=\C= Matches a single code point: in Boost regex this has exactly the + same effect as a "." operator. +=\X= Matches a combining character sequence: that is any non-combining + character followed by a sequence of zero or more combining characters. + +[h5 Matching Line Endings] + +The escape sequence =\R= matches any line ending character sequence, specifically it is identical to +the expression [^(?>\x0D\x0A?|\[\x0A-\x0C\x85\x{2028}\x{2029}\])]. + +[h5 Keeping back some text] + +=\K= Resets the start location of $0 to the current text position: in other words everything to the +left of \K is "kept back" and does not form part of the regular expression match. $` is updated +accordingly. + +For example =foo\Kbar= matched against the text "foobar" would return the match "bar" for $0 and "foo" +for $`. This can be used to simulate variable width lookbehind assertions. + +[h5 Any other escape] + +Any other escape sequence matches the character that is escaped, for example +\\@ matches a literal '@'. + +[h4 Perl Extended Patterns] + +Perl-specific extensions to the regular expression syntax all start with =(?=. + +[h5 Named Subexpressions] + +You can create a named subexpression using: + + (?<NAME>expression) + +Which can be then be refered to by the name /NAME/. Alternatively you can delimit the name +using 'NAME' as in: + + (?'NAME'expression) + +These named subexpressions can be refered to in a backreference using either [^\g{NAME}] or [^\k<NAME>] +and can also be refered to by name in a [perl_format] format string for search and replace operations, or in the +[match_results] member functions. + +[h5 Comments] + +=(?# ... )= is treated as a comment, it's contents are ignored. + +[h5 Modifiers] + +=(?imsx-imsx ... )= alters which of the perl modifiers are in effect within +the pattern, changes take effect from the point that the block is first seen +and extend to any enclosing =)=. Letters before a '-' turn that perl +modifier on, letters afterward, turn it off. + +=(?imsx-imsx:pattern)= applies the specified modifiers to pattern only. + +[h5 Non-marking groups] + +=(?:pattern)= lexically groups pattern, without generating an additional +sub-expression. + +[h5 Branch reset] + +=(?|pattern)= resets the subexpression count at the start of each "|" alternative within /pattern/. + +The sub-expression count following this construct is that of whichever branch had the largest number of +sub-expressions. This construct is useful when you want to capture one of a number of alternative matches +in a single sub-expression index. + +In the following example the index of each sub-expression is shown below the expression: + +[pre +# before ---------------branch-reset----------- after +/ ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x +# 1 2 2 3 2 3 4 +] + +[h5 Lookahead] + +[^(?=pattern)] consumes zero characters, only if pattern matches. + +=(?!pattern)= consumes zero characters, only if pattern does not match. + +Lookahead is typically used to create the logical AND of two regular +expressions, for example if a password must contain a lower case letter, +an upper case letter, a punctuation symbol, and be at least 6 characters long, +then the expression: + + (?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,} + +could be used to validate the password. + +[h5 Lookbehind] + +[^(?<=pattern)] consumes zero characters, only if pattern could be matched +against the characters preceding the current position (pattern must be +of fixed length). + +=(?<!pattern)= consumes zero characters, only if pattern could not be +matched against the characters preceding the current position (pattern must +be of fixed length). + +[h5 Independent sub-expressions] + +=(?>pattern)= /pattern/ is matched independently of the surrounding patterns, +the expression will never backtrack into /pattern/. Independent sub-expressions +are typically used to improve performance; only the best possible match +for pattern will be considered, if this doesn't allow the expression as a +whole to match then no match is found at all. + +[h5 Recursive Expressions] + +[^(?['N]) (?-['N]) (?+['N]) (?R) (?0) (?&NAME)] + +=(?R)= and =(?0)= recurse to the start of the entire pattern. + +[^(?['N])] executes sub-expression /N/ recursively, for example =(?2)= will recurse to sub-expression 2. + +[^(?-['N])] and [^(?+['N])] are relative recursions, so for example =(?-1)= recurses to the last sub-expression to be declared, +and =(?+1)= recurses to the next sub-expression to be declared. + +[^(?&NAME)] recurses to named sub-expression ['NAME]. + +[h5 Conditional Expressions] + +=(?(condition)yes-pattern|no-pattern)= attempts to match /yes-pattern/ if +the /condition/ is true, otherwise attempts to match /no-pattern/. + +=(?(condition)yes-pattern)= attempts to match /yes-pattern/ if the /condition/ +is true, otherwise fails. + +/condition/ may be either: a forward lookahead assert, the index of +a marked sub-expression (the condition becomes true if the sub-expression +has been matched), or an index of a recursion (the condition become true if we are executing +directly inside the specified recursion). + +Here is a summary of the possible predicates: + +* [^(?(?\=assert)yes-pattern|no-pattern)] Executes /yes-pattern/ if the forward look-ahead assert matches, otherwise +executes /no-pattern/. +* =(?(?!assert)yes-pattern|no-pattern)= Executes /yes-pattern/ if the forward look-ahead assert does not match, otherwise +executes /no-pattern/. +* =(?(R)yes-pattern|no-pattern)= Executes /yes-pattern/ if we are executing inside a recursion, otherwise +executes /no-pattern/. +* [^(?(R['N])yes-pattern|no-pattern)] Executes /yes-pattern/ if we are executing inside a recursion to sub-expression /N/, otherwise +executes /no-pattern/. +* [^(?(DEFINE)never-exectuted-pattern)] Defines a block of code that is never executed and matches no characters: +this is usually used to define one or more named sub-expressions which are refered to from elsewhere in the pattern. + +[h4 Operator precedence] + +The order of precedence for of operators is as follows: + +# Collation-related bracket symbols `[==] [::] [..]` +# Escaped characters =\= +# Character set (bracket expression) `[]` +# Grouping =()= +# Single-character-ERE duplication =* + ? {m,n}= +# Concatenation +# Anchoring ^$ +# Alternation | + +[h3 What gets matched] + +If you view the regular expression as a directed (possibly cyclic) +graph, then the best match found is the first match found by a +depth-first-search performed on that graph, while matching the input text. + +Alternatively: + +The best match found is the +[link boost_regex.syntax.leftmost_longest_rule leftmost match], +with individual elements matched as follows; + +[table +[[Construct][What gets matched]] +[[=AtomA AtomB=][Locates the best match for /AtomA/ that has a following match for /AtomB/.]] +[[=Expression1 | Expression2=][If /Expresion1/ can be matched then returns that match, + otherwise attempts to match /Expression2/.]] +[[=S{N}=][Matches /S/ repeated exactly N times.]] +[[=S{N,M}=][Matches S repeated between N and M times, and as many times as possible.]] +[[=S{N,M}?=][Matches S repeated between N and M times, and as few times as possible.]] +[[=S?, S*, S+=][The same as =S{0,1}=, =S{0,UINT_MAX}=, =S{1,UINT_MAX}= respectively.]] +[[=S??, S*?, S+?=][The same as =S{0,1}?=, =S{0,UINT_MAX}?=, =S{1,UINT_MAX}?= respectively.]] +[[=(?>S)=][Matches the best match for /S/, and only that.]] +[[[^(?=S), (?<=S)]][Matches only the best match for /S/ (this is only + visible if there are capturing parenthesis within /S/).]] +[[=(?!S), (?<!S)=][Considers only whether a match for S exists or not.]] +[[=(?(condition)yes-pattern | no-pattern)=][If condition is true, then + only yes-pattern is considered, otherwise only no-pattern is considered.]] +] + +[h3 Variations] + +The [link boost_regex.ref.syntax_option_type.syntax_option_type_perl options =normal=, +=ECMAScript=, =JavaScript= and =JScript=] are all synonyms for +=perl=. + +[h3 Options] + +There are a [link boost_regex.ref.syntax_option_type.syntax_option_type_perl +variety of flags] that may be combined with the =perl= option when +constructing the regular expression, in particular note that the +=newline_alt= option alters the syntax, while the =collate=, =nosubs= and +=icase= options modify how the case and locale sensitivity are to be applied. + +[h3 Pattern Modifiers] + +The perl =smix= modifiers can either be applied using a =(?smix-smix)= +prefix to the regular expression, or with one of the +[link boost_regex.ref.syntax_option_type.syntax_option_type_perl regex-compile time +flags =no_mod_m=, =mod_x=, =mod_s=, and =no_mod_s=]. + +[h3 References] + +[@http://perldoc.perl.org/perlre.html Perl 5.8]. + + +[endsect] + + diff --git a/libs/regex/doc/thread_safety.qbk b/libs/regex/doc/thread_safety.qbk new file mode 100644 index 0000000000..a95a7ac7c4 --- /dev/null +++ b/libs/regex/doc/thread_safety.qbk @@ -0,0 +1,41 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:thread_safety Thread Safety] + +The Boost.Regex library is thread safe when Boost is: you can verify that +Boost is in thread safe mode by checking to see if `BOOST_HAS_THREADS` is +defined: this macro is set automatically by the config system when +threading support is turned on in your compiler. + +Class [basic_regex] and its typedefs regex and wregex are thread safe, +in that compiled regular expressions can safely be shared between threads. +The matching algorithms [regex_match], [regex_search], and [regex_replace] +are all re-entrant and thread safe. Class [match_results] is now thread safe, +in that the results of a match can be safely copied from one thread to +another (for example one thread may find matches and push [match_results] +instances onto a queue, while another thread pops them off the other end), +otherwise use a separate instance of [match_results] per thread. + +The [link boost_regex.ref.posix POSIX API functions] are all re-entrant and thread safe, regular +expressions compiled with regcomp can also be shared between threads. + +The [link boost_regex.ref.deprecated_interfaces.old_regex class RegEx] is +only thread safe if each thread gets its own +RegEx instance (apartment threading) - this is a consequence of +RegEx handling both compiling and matching regular expressions. + +Finally note that changing the global locale invalidates all compiled +regular expressions, therefore calling `set_locale` from one thread +while another uses regular expressions will produce unpredictable results. + +There is also a requirement that there is only one thread executing prior +to the start of main(). + +[endsect] + diff --git a/libs/regex/doc/unicode.qbk b/libs/regex/doc/unicode.qbk new file mode 100644 index 0000000000..5028921f40 --- /dev/null +++ b/libs/regex/doc/unicode.qbk @@ -0,0 +1,42 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + + +[section:unicode Unicode and Boost.Regex] + +There are two ways to use Boost.Regex with Unicode strings: + +[h4 Rely on wchar_t] + +If your platform's `wchar_t` type can hold Unicode strings, and your +platform's C/C++ runtime correctly handles wide character constants +(when passed to `std::iswspace` `std::iswlower` etc), then you can use +`boost::wregex` to process Unicode. However, there are several +disadvantages to this approach: + +* It's not portable: there's no guarantee on the width of `wchar_t`, or +even whether the runtime treats wide characters as Unicode at all, +most Windows compilers do so, but many Unix systems do not. +* There's no support for Unicode-specific character classes: `[[:Nd:]]`, `[[:Po:]]` etc. +* You can only search strings that are encoded as sequences of wide +characters, it is not possible to search UTF-8, or even UTF-16 on many platforms. + +[h4 Use a Unicode Aware Regular Expression Type.] + +If you have the +[@http://www.ibm.com/software/globalization/icu/ ICU library], then +Boost.Regex can be +[link boost_regex.install.building_with_unicode_and_icu_support +configured to make use +of it], and provide a distinct regular expression type (boost::u32regex), +that supports both Unicode specific character properties, and the searching +of text that is encoded in either UTF-8, UTF-16, or UTF-32. See: +[link boost_regex.ref.non_std_strings.icu +ICU string class support]. + +[endsect] + diff --git a/libs/regex/doc/unicode_iterators.qbk b/libs/regex/doc/unicode_iterators.qbk new file mode 100644 index 0000000000..e5962bd246 --- /dev/null +++ b/libs/regex/doc/unicode_iterators.qbk @@ -0,0 +1,127 @@ +[/ + Copyright 2006-2007 John Maddock. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:uni_iter Unicode Iterators] + +[h4 Synopsis] + +``#include <boost/regex/pending/unicode_iterator.hpp>`` + + template <class BaseIterator, class U16Type = ::boost::uint16_t> + class u32_to_u16_iterator; + + template <class BaseIterator, class U32Type = ::boost::uint32_t> + class u16_to_u32_iterator; + + template <class BaseIterator, class U8Type = ::boost::uint8_t> + class u32_to_u8_iterator; + + template <class BaseIterator, class U32Type = ::boost::uint32_t> + class u8_to_u32_iterator; + + template <class BaseIterator> + class utf16_output_iterator; + + template <class BaseIterator> + class utf8_output_iterator; + + +[h4 Description] + +This header contains a selection of iterator adaptors that make a sequence of characters in one +encoding "look like" a read-only sequence of characters in another encoding. + + template <class BaseIterator, class U16Type = ::boost::uint16_t> + class u32_to_u16_iterator + { + u32_to_u16_iterator(); + u32_to_u16_iterator(BaseIterator start_position); + + // Other standard BidirectionalIterator members here... + }; + +A Bidirectional iterator adapter that makes an underlying sequence of UTF32 characters look like +a (read-only) sequence of UTF16 characters. The UTF16 characters are encoded in the platforms +native byte order. + + template <class BaseIterator, class U32Type = ::boost::uint32_t> + class u16_to_u32_iterator + { + u16_to_u32_iterator(); + u16_to_u32_iterator(BaseIterator start_position); + u16_to_u32_iterator(BaseIterator start_position, BaseIterator start_range, BaseIterator end_range); + + // Other standard BidirectionalIterator members here... + }; + +A Bidirectional iterator adapter that makes an underlying sequence of UTF16 characters +(in the platforms native byte order) look like a (read-only) sequence of UTF32 characters. + +The three-arg constructor of this class takes the start and end of the underlying sequence +as well as the position to start iteration from. This constructor validates that the +underlying sequence has validly encoded endpoints: this prevents accidently incrementing/decrementing +past the end of the underlying sequence as a result of invalid UTF16 code sequences at the endpoints +of the underlying range. + + template <class BaseIterator, class U8Type = ::boost::uint8_t> + class u32_to_u8_iterator + { + u32_to_u8_iterator(); + u32_to_u8_iterator(BaseIterator start_position); + + // Other standard BidirectionalIterator members here... + }; + +A Bidirectional iterator adapter that makes an underlying sequence of UTF32 characters look like +a (read-only) sequence of UTF8 characters. + + template <class BaseIterator, class U32Type = ::boost::uint32_t> + class u8_to_u32_iterator + { + u8_to_u32_iterator(); + u8_to_u32_iterator(BaseIterator start_position); + u8_to_u32_iterator(BaseIterator start_position, BaseIterator start_range, BaseIterator end_range); + + // Other standard BidirectionalIterator members here... + }; + +A Bidirectional iterator adapter that makes an underlying sequence of UTF8 characters +look like a (read-only) sequence of UTF32 characters. + +The three-arg constructor of this class takes the start and end of the underlying sequence +as well as the position to start iteration from. This constructor validates that the +underlying sequence has validly encoded endpoints: this prevents accidently incrementing/decrementing +past the end of the underlying sequence as a result of invalid UTF8 code sequences at the endpoints +of the underlying range. + + template <class BaseIterator> + class utf16_output_iterator + { + utf16_output_iterator(const BaseIterator& b); + utf16_output_iterator(const utf16_output_iterator& that); + utf16_output_iterator& operator=(const utf16_output_iterator& that); + + // Other standard OutputIterator members here... + }; + +Simple OutputIterator adapter - accepts UTF32 values as input, and forwards them to ['BaseIterator b] +as UTF16. Both UTF32 and UTF16 values are in native byte order. + + template <class BaseIterator> + class utf8_output_iterator + { + utf8_output_iterator(const BaseIterator& b); + utf8_output_iterator(const utf8_output_iterator& that); + utf8_output_iterator& operator=(const utf8_output_iterator& that); + + // Other standard OutputIterator members here... + }; + +Simple OutputIterator adapter - accepts UTF32 values as input, and forwards them to ['BaseIterator b] +as UTF8. The UTF32 input values must be in native byte order. + +[endsect] diff --git a/libs/regex/doc/vc71-performance.html b/libs/regex/doc/vc71-performance.html new file mode 100644 index 0000000000..c847845a86 --- /dev/null +++ b/libs/regex/doc/vc71-performance.html @@ -0,0 +1,703 @@ +<html> + <head> + <title>Regular Expression Performance Comparison</title> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> + <meta name="Template" content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot"> + <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> + </head> + <body bgcolor="#ffffff" link="#0000ff" vlink="#800080"> + <h2>Regular Expression Performance Comparison</h2> + <p> + The following tables provide comparisons between the following regular + expression libraries:</p> + <p><a href="http://research.microsoft.com/projects/greta">GRETA</a>.</p> + <p><a href="http://www.boost.org/">The Boost regex library</a>.</p> + <p><a href="http://arglist.com/regex/">Henry Spencer's regular expression library</a> + - this is provided for comparison as a typical non-backtracking implementation.</p> + <P>Philip Hazel's <A href="http://www.pcre.org">PCRE</A> library.</P> + <H3>Details</H3> + <P>Machine: Intel Pentium 4 2.8GHz PC.</P> + <P>Compiler: Microsoft Visual C++ version 7.1.</P> + <P>C++ Standard Library: Dinkumware standard library version 313.</P> + <P>OS: Win32.</P> + <P>Boost version: 1.31.0.</P> + <P>PCRE version: 3.9.</P> + <P> + As ever care should be taken in interpreting the results, only sensible regular + expressions (rather than pathological cases) are given, most are taken from the + Boost regex examples, or from the <a href="http://www.regxlib.com/">Library of + Regular Expressions</a>. In addition, some variation in the relative + performance of these libraries can be expected on other machines - as memory + access and processor caching effects can be quite large for most finite state + machine algorithms.</P> + <H3>Averages</H3> + <P>The following are the average relative scores for all the tests: the perfect + regular expression library would score 1, in practice any small number + (say less that 4 or 5) is pretty good.</P> + <P><table border="1" cellspacing="1"> + <tr> + <td><strong>GRETA</strong></td> + <td><strong>GRETA<BR> + (non-recursive mode)</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td>2.31619</td> + <td>6.14203</td> + <td>2.30668</td> + <td>1.94363</td> + <td>124.752</td> + <td>2.09365</td> + </tr> + </table> + </P> + <h3>Comparison 1: Long Search</h3> + <p>For each of the following regular expressions the time taken to find all + occurrences of the expression within a long English language text was measured + (<a href="http://www.gutenberg.org/files/3200/old/mtent12.zip">mtent12.txt</a> + from <a href="http://promo.net/pg/">Project Gutenberg</a>, 19Mb). </p> + <P><table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>GRETA</strong></td> + <td><strong>GRETA<BR> + (non-recursive mode)</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>Twain</code></td> + <td><font color="#008000">1<BR> + (0.0407s)</font></td> + <td><font color="#008000">1<BR> + (0.0407s)</font></td> + <td>4.18<BR> + (0.17s)</td> + <td>4.18<BR> + (0.17s)</td> + <td>135<BR> + (5.48s)</td> + <td>1.37<BR> + (0.0557s)</td> + </tr> + <tr> + <td><code>Huck[[:alpha:]]+</code></td> + <td><font color="#008000">1.02<BR> + (0.0381s)</font></td> + <td><font color="#008000">1<BR> + (0.0375s)</font></td> + <td>4.53<BR> + (0.17s)</td> + <td>4.54<BR> + (0.17s)</td> + <td>166<BR> + (6.23s)</td> + <td>1.34<BR> + (0.0501s)</td> + </tr> + <tr> + <td><code>[[:alpha:]]+ing</code></td> + <td>4.3<BR> + (4.18s)</td> + <td>9.93<BR> + (9.65s)</td> + <td>1.15<BR> + (1.12s)</td> + <td><font color="#008000">1<BR> + (0.972s)</font></td> + <td>8.15<BR> + (7.92s)</td> + <td>5.85<BR> + (5.69s)</td> + </tr> + <tr> + <td><code>^[^ ]*?Twain</code></td> + <td>6.25<BR> + (1.84s)</td> + <td>20.9<BR> + (6.16s)</td> + <td>1.56<BR> + (0.461s)</td> + <td><font color="#008000">1<BR> + (0.295s)</font></td> + <td>NA</td> + <td>2.58<BR> + (0.761s)</td> + </tr> + <tr> + <td><code>Tom|Sawyer|Huckleberry|Finn</code></td> + <td>6.53<BR> + (0.711s)</td> + <td>11.5<BR> + (1.25s)</td> + <td>2.3<BR> + (0.251s)</td> + <td><font color="#008000">1<BR> + (0.109s)</font></td> + <td>196<BR> + (21.4s)</td> + <td>1.77<BR> + (0.193s)</td> + </tr> + <tr> + <td><code>(Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)</code></td> + <td>3.88<BR> + (0.972s)</td> + <td>6.48<BR> + (1.62s)</td> + <td>1.66<BR> + (0.416s)</td> + <td><font color="#008000">1<BR> + (0.251s)</font></td> + <td>NA</td> + <td>2.48<BR> + (0.62s)</td> + </tr> + </table> + </P> + <h3>Comparison 2: Medium Sized Search</h3> + <p>For each of the following regular expressions the time taken to find all + occurrences of the expression within a medium sized English language text was + measured (the first 50K from mtent12.txt). </p> + <P><table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>GRETA</strong></td> + <td><strong>GRETA<BR> + (non-recursive mode)</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>Twain</code></td> + <td><font color="#008000">1<BR> + (9.05e-005s)</font></td> + <td><font color="#008000">1.03<BR> + (9.29e-005s)</font></td> + <td>4.92<BR> + (0.000445s)</td> + <td>4.92<BR> + (0.000445s)</td> + <td>43.2<BR> + (0.00391s)</td> + <td>3.18<BR> + (0.000288s)</td> + </tr> + <tr> + <td><code>Huck[[:alpha:]]+</code></td> + <td><font color="#008000">1<BR> + (8.56e-005s)</font></td> + <td><font color="#008000">1<BR> + (8.56e-005s)</font></td> + <td>4.97<BR> + (0.000425s)</td> + <td>4.98<BR> + (0.000426s)</td> + <td>2.8<BR> + (0.000239s)</td> + <td>2.2<BR> + (0.000188s)</td> + </tr> + <tr> + <td><code>[[:alpha:]]+ing</code></td> + <td>5.29<BR> + (0.011s)</td> + <td>11.8<BR> + (0.0244s)</td> + <td>1.19<BR> + (0.00246s)</td> + <td><font color="#008000">1<BR> + (0.00207s)</font></td> + <td>8.77<BR> + (0.0182s)</td> + <td>6.88<BR> + (0.0142s)</td> + </tr> + <tr> + <td><code>^[^ ]*?Twain</code></td> + <td>5.98<BR> + (0.00462s)</td> + <td>20.2<BR> + (0.0156s)</td> + <td>1.54<BR> + (0.00119s)</td> + <td><font color="#008000">1<BR> + (0.000772s)</font></td> + <td>NA</td> + <td>2.53<BR> + (0.00195s)</td> + </tr> + <tr> + <td><code>Tom|Sawyer|Huckleberry|Finn</code></td> + <td>3.42<BR> + (0.00207s)</td> + <td>6.31<BR> + (0.00383s)</td> + <td>1.71<BR> + (0.00104s)</td> + <td><font color="#008000">1<BR> + (0.000606s)</font></td> + <td>81.5<BR> + (0.0494s)</td> + <td>1.96<BR> + (0.00119s)</td> + </tr> + <tr> + <td><code>(Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)</code></td> + <td>1.97<BR> + (0.00266s)</td> + <td>3.77<BR> + (0.00509s)</td> + <td>1.38<BR> + (0.00186s)</td> + <td><font color="#008000">1<BR> + (0.00135s)</font></td> + <td>297<BR> + (0.401s)</td> + <td>1.77<BR> + (0.00238s)</td> + </tr> + </table> + </P> + <H3>Comparison 3: C++ Code Search</H3> + <P>For each of the following regular expressions the time taken to find all + occurrences of the expression within the C++ source file <A href="../../../boost/crc.hpp"> + boost/crc.hpp</A> was measured. </P> + <P><table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>GRETA</strong></td> + <td><strong>GRETA<BR> + (non-recursive mode)</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?(class|struct)[[:space:]]*(\<\w+\>([ + ]*\([^)]*\))?[[:space:]]*)*(\<\w*\>)[[:space:]]*(<[^;:{]+>[[:space:]]*)?(\{|:[^;\{()]*\{)</code></td> + <td>6.67<BR> + (0.00147s)</td> + <td>36.9<BR> + (0.00813s)</td> + <td><font color="#008000">1.03<BR> + (0.000227s)</font></td> + <td><font color="#008000">1<BR> + (0.00022s)</font></td> + <td>557<BR> + (0.123s)</td> + <td>2.57<BR> + (0.000566s)</td> + </tr> + <tr> + <td><code>(^[ + ]*#(?:[^\\\n]|\\[^\n_[:punct:][:alnum:]]*[\n[:punct:][:word:]])*)|(//[^\n]*|/\*.*?\*/)|\<([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\>|('(?:[^\\']|\\.)*'|"(?:[^\\"]|\\.)*")|\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool|break|case|catch|cdecl|char|class|const|const_cast|continue|default|delete|do|double|dynamic_cast|else|enum|explicit|extern|false|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|operator|pascal|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_cast|struct|switch|template|this|throw|true|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\></code></td> + <td><font color="#008000">1<BR> + (0.00555s)</font></td> + <td>3.32<BR> + (0.0185s)</td> + <td>2.53<BR> + (0.0141s)</td> + <td>1.94<BR> + (0.0108s)</td> + <td>NA</td> + <td>3.38<BR> + (0.0188s)</td> + </tr> + <tr> + <td><code>^[ ]*#[ ]*include[ ]+("[^"]+"|<[^>]+>)</code></td> + <td>4.77<BR> + (0.00156s)</td> + <td>24.8<BR> + (0.00814s)</td> + <td>1.13<BR> + (0.000372s)</td> + <td><font color="#008000">1<BR> + (0.000328s)</font></td> + <td>120<BR> + (0.0394s)</td> + <td>1.58<BR> + (0.000518s)</td> + </tr> + <tr> + <td><code>^[ ]*#[ ]*include[ ]+("boost/[^"]+"|<boost/[^>]+>)</code></td> + <td>4.72<BR> + (0.00154s)</td> + <td>24.8<BR> + (0.00813s)</td> + <td>1.12<BR> + (0.000367s)</td> + <td><font color="#008000">1<BR> + (0.000328s)</font></td> + <td>143<BR> + (0.0469s)</td> + <td>1.58<BR> + (0.000518s)</td> + </tr> + </table> + </P> + <H3> + <H3>Comparison 4: HTML Document Search</H3> + </H3> + <P>For each of the following regular expressions the time taken to find all + occurrences of the expression within the html file <A href="../../libraries.htm">libs/libraries.htm</A> + was measured. </P> + <P><table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>GRETA</strong></td> + <td><strong>GRETA<BR> + (non-recursive mode)</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>beman|john|dave</code></td> + <td>4.07<BR> + (0.00111s)</td> + <td>7.14<BR> + (0.00195s)</td> + <td>1.75<BR> + (0.000479s)</td> + <td><font color="#008000">1<BR> + (0.000273s)</font></td> + <td>54.3<BR> + (0.0149s)</td> + <td>1.83<BR> + (0.000499s)</td> + </tr> + <tr> + <td><code><p>.*?</p></code></td> + <td><font color="#008000">1<BR> + (6.59e-005s)</font></td> + <td><font color="#008000">1.04<BR> + (6.84e-005s)</font></td> + <td>4.15<BR> + (0.000273s)</td> + <td>4.23<BR> + (0.000279s)</td> + <td>NA</td> + <td>4.23<BR> + (0.000279s)</td> + </tr> + <tr> + <td><code><a[^>]+href=("[^"]*"|[^[:space:]]+)[^>]*></code></td> + <td>1.39<BR> + (0.000626s)</td> + <td>1.83<BR> + (0.000821s)</td> + <td>1.41<BR> + (0.000636s)</td> + <td><font color="#008000">1<BR> + (0.00045s)</font></td> + <td>351<BR> + (0.158s)</td> + <td>1.13<BR> + (0.000509s)</td> + </tr> + <tr> + <td><code><h[12345678][^>]*>.*?</h[12345678]></code></td> + <td><font color="#008000">1<BR> + (0.000142s)</font></td> + <td>1.21<BR> + (0.000171s)</td> + <td>2.62<BR> + (0.000372s)</td> + <td>1.48<BR> + (0.00021s)</td> + <td>NA</td> + <td>1.73<BR> + (0.000245s)</td> + </tr> + <tr> + <td><code><img[^>]+src=("[^"]*"|[^[:space:]]+)[^>]*></code></td> + <td><font color="#008000">1<BR> + (5.38e-005s)</font></td> + <td><font color="#008000">1.05<BR> + (5.63e-005s)</font></td> + <td>5<BR> + (0.000269s)</td> + <td>5.18<BR> + (0.000278s)</td> + <td>604<BR> + (0.0325s)</td> + <td>4.05<BR> + (0.000218s)</td> + </tr> + <tr> + <td><code><font[^>]+face=("[^"]*"|[^[:space:]]+)[^>]*>.*?</font></code></td> + <td><font color="#008000">1<BR> + (6.05e-005s)</font></td> + <td><font color="#008000">1.09<BR> + (6.59e-005s)</font></td> + <td>4.45<BR> + (0.000269s)</td> + <td>4.69<BR> + (0.000284s)</td> + <td>NA</td> + <td>3.64<BR> + (0.00022s)</td> + </tr> + </table> + </P> + <H3>Comparison 3: Simple Matches</H3> + <p> + For each of the following regular expressions the time taken to match against + the text indicated was measured. </p> + <P><table border="1" cellspacing="1"> + <tr> + <td><strong>Expression</strong></td> + <td><strong>Text</strong></td> + <td><strong>GRETA</strong></td> + <td><strong>GRETA<BR> + (non-recursive mode)</strong></td> + <td><strong>Boost</strong></td> + <td><strong>Boost + C++ locale</strong></td> + <td><strong>POSIX</strong></td> + <td><strong>PCRE</strong></td> + </tr> + <tr> + <td><code>abc</code></td> + <td>abc</td> + <td>1.32<BR> + (2.24e-007s)</td> + <td>1.86<BR> + (3.15e-007s)</td> + <td>1.25<BR> + (2.12e-007s)</td> + <td>1.24<BR> + (2.1e-007s)</td> + <td>2.98<BR> + (5.05e-007s)</td> + <td><font color="#008000">1<BR> + (1.7e-007s)</font></td> + </tr> + <tr> + <td><code>^([0-9]+)(\-| |$)(.*)$</code></td> + <td>100- this is a line of ftp response which contains a message string</td> + <td>1.32<BR> + (5.91e-007s)</td> + <td>1.96<BR> + (8.78e-007s)</td> + <td>2.68<BR> + (1.2e-006s)</td> + <td>1.53<BR> + (6.88e-007s)</td> + <td>332<BR> + (0.000149s)</td> + <td><font color="#008000">1<BR> + (4.49e-007s)</font></td> + </tr> + <tr> + <td><code>([[:digit:]]{4}[- ]){3}[[:digit:]]{3,4}</code></td> + <td>1234-5678-1234-456</td> + <td>1.44<BR> + (7.16e-007s)</td> + <td>2.04<BR> + (1.01e-006s)</td> + <td>3.35<BR> + (1.66e-006s)</td> + <td>2.15<BR> + (1.07e-006s)</td> + <td>31.4<BR> + (1.56e-005s)</td> + <td><font color="#008000">1<BR> + (4.96e-007s)</font></td> + </tr> + <tr> + <td><code>^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$</code></td> + <td>john@johnmaddock.co.uk</td> + <td><font color="#008000">1<BR> + (1.18e-006s)</font></td> + <td>1.42<BR> + (1.68e-006s)</td> + <td>2.06<BR> + (2.44e-006s)</td> + <td>1.35<BR> + (1.6e-006s)</td> + <td>165<BR> + (0.000196s)</td> + <td><font color="#008000">1.06<BR> + (1.26e-006s)</font></td> + </tr> + <tr> + <td><code>^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$</code></td> + <td>foo12@foo.edu</td> + <td><font color="#008000">1<BR> + (1.09e-006s)</font></td> + <td>1.44<BR> + (1.57e-006s)</td> + <td>2.21<BR> + (2.4e-006s)</td> + <td>1.41<BR> + (1.53e-006s)</td> + <td>108<BR> + (0.000117s)</td> + <td><font color="#008000">1.04<BR> + (1.13e-006s)</font></td> + </tr> + <tr> + <td><code>^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$</code></td> + <td>bob.smith@foo.tv</td> + <td><font color="#008000">1<BR> + (1.07e-006s)</font></td> + <td>1.43<BR> + (1.53e-006s)</td> + <td>2.21<BR> + (2.37e-006s)</td> + <td>1.45<BR> + (1.55e-006s)</td> + <td>123<BR> + (0.000132s)</td> + <td><font color="#008000">1.05<BR> + (1.13e-006s)</font></td> + </tr> + <tr> + <td><code>^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$</code></td> + <td>EH10 2QQ</td> + <td><font color="#008000">1<BR> + (3.19e-007s)</font></td> + <td>1.67<BR> + (5.34e-007s)</td> + <td>1.58<BR> + (5.05e-007s)</td> + <td>1.4<BR> + (4.49e-007s)</td> + <td>10.4<BR> + (3.32e-006s)</td> + <td>1.15<BR> + (3.68e-007s)</td> + </tr> + <tr> + <td><code>^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$</code></td> + <td>G1 1AA</td> + <td><font color="#008000">1<BR> + (3.29e-007s)</font></td> + <td>1.65<BR> + (5.44e-007s)</td> + <td>1.51<BR> + (4.96e-007s)</td> + <td>1.36<BR> + (4.49e-007s)</td> + <td>8.46<BR> + (2.79e-006s)</td> + <td>1.1<BR> + (3.63e-007s)</td> + </tr> + <tr> + <td><code>^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$</code></td> + <td>SW1 1ZZ</td> + <td><font color="#008000">1<BR> + (3.25e-007s)</font></td> + <td>1.64<BR> + (5.34e-007s)</td> + <td>1.56<BR> + (5.05e-007s)</td> + <td>1.38<BR> + (4.49e-007s)</td> + <td>9.29<BR> + (3.02e-006s)</td> + <td>1.13<BR> + (3.68e-007s)</td> + </tr> + <tr> + <td><code>^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$</code></td> + <td>4/1/2001</td> + <td><font color="#008000">1<BR> + (3.44e-007s)</font></td> + <td>1.55<BR> + (5.34e-007s)</td> + <td>2.36<BR> + (8.12e-007s)</td> + <td>2.2<BR> + (7.55e-007s)</td> + <td>19.6<BR> + (6.72e-006s)</td> + <td>1.81<BR> + (6.21e-007s)</td> + </tr> + <tr> + <td><code>^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$</code></td> + <td>12/12/2001</td> + <td><font color="#008000">1.05<BR> + (6.59e-007s)</font></td> + <td>1.66<BR> + (1.05e-006s)</td> + <td>1.44<BR> + (9.07e-007s)</td> + <td>1.23<BR> + (7.73e-007s)</td> + <td>11.6<BR> + (7.34e-006s)</td> + <td><font color="#008000">1<BR> + (6.3e-007s)</font></td> + </tr> + <tr> + <td><code>^[-+]?[[:digit:]]*\.?[[:digit:]]*$</code></td> + <td>123</td> + <td><font color="#008000">1<BR> + (5.72e-007s)</font></td> + <td>1.59<BR> + (9.07e-007s)</td> + <td>1.6<BR> + (9.16e-007s)</td> + <td>1.49<BR> + (8.5e-007s)</td> + <td>6.14<BR> + (3.51e-006s)</td> + <td>1.22<BR> + (6.97e-007s)</td> + </tr> + <tr> + <td><code>^[-+]?[[:digit:]]*\.?[[:digit:]]*$</code></td> + <td>+3.14159</td> + <td><font color="#008000">1<BR> + (6.78e-007s)</font></td> + <td>1.52<BR> + (1.03e-006s)</td> + <td>1.47<BR> + (9.94e-007s)</td> + <td>1.31<BR> + (8.88e-007s)</td> + <td>10.8<BR> + (7.34e-006s)</td> + <td><font color="#008000">1.08<BR> + (7.35e-007s)</font></td> + </tr> + <tr> + <td><code>^[-+]?[[:digit:]]*\.?[[:digit:]]*$</code></td> + <td>-3.14159</td> + <td><font color="#008000">1<BR> + (6.78e-007s)</font></td> + <td>1.52<BR> + (1.03e-006s)</td> + <td>1.46<BR> + (9.92e-007s)</td> + <td>1.32<BR> + (8.98e-007s)</td> + <td>10.5<BR> + (7.11e-006s)</td> + <td>1.11<BR> + (7.54e-007s)</td> + </tr> + </table> + </P> + <hr> + <p><i>© Copyright John Maddock 2003</i></p> + <P><I>Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file <A href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> + or copy at <A href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)</I></P> + </body> +</html> + diff --git a/libs/regex/example/Jamfile.v2 b/libs/regex/example/Jamfile.v2 new file mode 100644 index 0000000000..dd958c7dac --- /dev/null +++ b/libs/regex/example/Jamfile.v2 @@ -0,0 +1,81 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +project + : requirements + <threading>multi + <link>shared:<define>BOOST_REGEX_DYN_LINK=1 + # There are unidentified linker problems on these platforms: + <toolset>mipspro-7.4:<link>static + <toolset>sun-5.9:<link>static + <toolset>msvc:<warnings>all + <toolset>gcc:<warnings>all + <toolset>gcc:<cxxflags>-Wextra + <define>U_USING_ICU_NAMESPACE=0 + #<toolset>gcc-mw:<link>static + #<toolset>gcc-mingw:<link>static + <toolset>gcc-cygwin:<link>static + ; + +rule regex-test-run ( sources + : input * : name * ) +{ + return [ + run + # sources + $(sources) + # dependencies + ../build//boost_regex + : # additional args + $(input) + : # test-files + : # requirements + <toolset>msvc-7.1:<define>TEST_MFC=1 <toolset>msvc-7.0:<define>TEST_MFC=1 + : # test name + $(name) + ] ; +} + +test-suite regex-examples : + +[ regex-test-run timer/regex_timer.cpp : $(BOOST_ROOT)/libs/regex/example/timer/input_script.txt ] +[ regex-test-run grep/grep.cpp ../../program_options/build//boost_program_options/<link>static : -n -b $(BOOST_ROOT)/boost/regex.hpp $(BOOST_ROOT)/boost/type_traits.hpp : test_grep ] +[ regex-test-run snippets/credit_card_example.cpp ] +[ regex-test-run snippets/mfc_example.cpp ] +[ regex-test-run snippets/icu_example.cpp ] +[ regex-test-run snippets/partial_regex_grep.cpp : $(BOOST_ROOT)/libs/regex/index.htm ] +[ regex-test-run snippets/partial_regex_iterate.cpp : $(BOOST_ROOT)/libs/regex/index.htm ] +[ regex-test-run snippets/partial_regex_match.cpp : 1234-5678-8765-4 ] +[ regex-test-run snippets/regex_grep_example_1.cpp : $(BOOST_ROOT)/boost/rational.hpp ] +[ regex-test-run snippets/regex_grep_example_2.cpp : $(BOOST_ROOT)/boost/rational.hpp ] +[ regex-test-run snippets/regex_grep_example_3.cpp : $(BOOST_ROOT)/boost/rational.hpp ] +[ regex-test-run snippets/regex_grep_example_4.cpp : $(BOOST_ROOT)/boost/rational.hpp ] +[ regex-test-run snippets/regex_match_example.cpp : -auto ] +[ regex-test-run snippets/regex_merge_example.cpp : $(BOOST_ROOT)/boost/rational.hpp ] +[ regex-test-run snippets/regex_replace_example.cpp : $(BOOST_ROOT)/boost/rational.hpp ] +[ regex-test-run snippets/regex_search_example.cpp : $(BOOST_ROOT)/boost/rational.hpp ] +[ regex-test-run snippets/regex_split_example_1.cpp : -auto ] +[ regex-test-run snippets/regex_split_example_2.cpp : $(BOOST_ROOT)/libs/regex/doc/html/index.html ] +[ regex-test-run snippets/regex_token_iterator_eg_1.cpp : -auto ] +[ regex-test-run snippets/regex_token_iterator_eg_2.cpp : $(BOOST_ROOT)/libs/regex/doc/html/index.html ] +[ regex-test-run snippets/regex_iterator_example.cpp : $(BOOST_ROOT)/boost/rational.hpp ] +[ run snippets/captures_example.cpp + ../test/captures//boost_regex_extra + : : : <threading>multi <define>BOOST_REGEX_MATCH_EXTRA=1 ] + +; + + + + + + + + + + + + + + diff --git a/libs/regex/example/grep/grep.cpp b/libs/regex/example/grep/grep.cpp new file mode 100644 index 0000000000..f2becf1237 --- /dev/null +++ b/libs/regex/example/grep/grep.cpp @@ -0,0 +1,217 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include <iostream> +#include <fstream> +#include <string> +#include <vector> +#include <boost/regex.hpp> + +#ifdef BOOST_MSVC +#pragma warning(disable:4512 4244) +#endif + +#include <boost/program_options.hpp> + +namespace po = boost::program_options; + +int after_context; +int before_context; +bool print_byte_offset; +bool count_only; +std::string pattern; +bool print_non_matching_files; +bool files_only; +bool print_line_numbers; + +boost::regex_constants::syntax_option_type flags = boost::regex_constants::basic; +boost::regex re; +boost::smatch what; +std::string current_file; +int file_count; + +void process_stream(std::istream& is) +{ + std::string line; + int match_found = 0; + int linenum = 1; + while(std::getline(is, line)) + { + bool result = boost::regex_search(line, what, re); + if(result) + { + if(print_non_matching_files) + return; + if(files_only) + { + std::cout << current_file << std::endl; + return; + } + if(!match_found && !count_only && (file_count > 1)) + { + std::cout << current_file << ":\n"; + } + ++match_found; + if(!count_only) + { + if(print_line_numbers) + { + std::cout << linenum << ":"; + } + if(print_byte_offset) + { + std::cout << what.position() << ":"; + } + std::cout << what[0] << std::endl; + } + } + ++linenum; + } + if(count_only && match_found) + { + std::cout << match_found << " matches found in file " << current_file << std::endl; + } + else if(print_non_matching_files && !match_found) + { + std::cout << current_file << std::endl; + } +} + +void process_file(const std::string& name) +{ + current_file = name; + std::ifstream is(name.c_str()); + if(is.bad()) + { + std::cerr << "Unable to open file " << name << std::endl; + } + process_stream(is); +} + +int main(int argc, char * argv[]) +{ + try{ + po::options_description opts("Options"); + opts.add_options() + ("help,h", "produce help message") + //("after-context,A", po::value<int>(&after_context)->default_value(0), "Print arg lines of trailing context after matching lines. Places a line containing -- between contiguous groups of matches.") + //("before-context,B", po::value<int>(&before_context)->default_value(0), "Print arg lines of leading context before matching lines. Places a line containing -- between contiguous groups of matches.") + //("context,C", po::value<int>(), "Print arg lines of output context. Places a line containing -- between contiguous groups of matches.") + ("byte-offset,b", "Print the byte offset within the input file before each line of output.") + ("count,c", "Suppress normal output; instead print a count of matching lines for each input file. With the -v, --invert-match option (see below), count non-matching lines.") + ("extended-regexp,E", "Interpret PATTERN as an POSIX-extended regular expression.") + ("perl-regexp,P", "Interpret PATTERN as a Perl regular expression.") + //("regexp,e", po::value<std::string>(&pattern), "Use PATTERN as the pattern; useful to protect patterns beginning with -.") + ("basic-regexp,G", "Interpret arg as a POSIX-basic regular expression (see below). This is the default.") + ("ignore-case,i", "Ignore case distinctions in both the PATTERN and the input files.") + ("files-without-match,L", "Suppress normal output; instead print the name of each input file from which no output would normally have been printed. The scanning will stop on the first match.") + ("files-with-matches,l", "Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match.") + ("line-number,n", "Prefix each line of output with the line number within its input file.") + ; + // Hidden options, will be allowed both on command line and + // in config file, but will not be shown to the user. + po::options_description hidden("Hidden options"); + hidden.add_options() + ("input-file", po::value< std::vector<std::string> >(), "input file") + ("input-pattern", po::value< std::string >(), "input file") + ; + + po::options_description cmdline_options; + cmdline_options.add(opts).add(hidden); + + po::positional_options_description p; + p.add("input-pattern", 1); + p.add("input-file", -1); + + po::variables_map vm; + po::store(po::command_line_parser(argc, argv).options(cmdline_options)/*.options(hidden)*/.positional(p).run(), vm); + po::notify(vm); + + if (vm.count("help")) + { + std::cout << opts << "\n"; + return 0; + } + if (vm.count("context")) + { + after_context = vm["context"].as< int >(); + before_context = after_context; + } + if(vm.count("extended-regexp")) + { + flags = boost::regex_constants::extended; + } + if(vm.count("basic-regexp")) + { + flags = boost::regex_constants::basic; + } + if(vm.count("perl-regexp")) + { + flags = boost::regex_constants::perl; + } + if(vm.count("ignore-case")) + { + flags |= boost::regex_constants::icase; + } + if(vm.count("byte-offset")) + { + print_byte_offset = true; + } + if(vm.count("count")) + { + count_only = true; + } + if(vm.count("files-without-match")) + { + print_non_matching_files = true; + } + if(vm.count("files-with-matches")) + { + files_only = true; + } + if(vm.count("line-number")) + { + print_line_numbers = true; + } + if(vm.count("input-pattern")) + { + pattern = vm["input-pattern"].as< std::string >(); + re.assign(pattern, flags); + } + else + { + std::cerr << "No pattern specified" << std::endl; + return 1; + } + if (vm.count("input-file")) + { + const std::vector<std::string>& files = vm["input-file"].as< std::vector<std::string> >(); + file_count = files.size(); + for(std::vector<std::string>::const_iterator i = files.begin(); i != files.end(); ++i) + { + process_file(*i); + } + } + else + { + // no input files, scan stdin instead: + process_stream(std::cin); + } + + } + catch(const std::exception& e) + { + std::cerr << e.what() << std::endl; + } + + return 0; +} + diff --git a/libs/regex/example/snippets/captures_example.cpp b/libs/regex/example/snippets/captures_example.cpp new file mode 100644 index 0000000000..d1ff1e9f88 --- /dev/null +++ b/libs/regex/example/snippets/captures_example.cpp @@ -0,0 +1,68 @@ +/* + * + * Copyright (c) 2003-2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE captures_example.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Demonstrate the behaviour of captures. + */ + +#include <boost/regex.hpp> +#include <iostream> + + +void print_captures(const std::string& regx, const std::string& text) +{ + boost::regex e(regx); + boost::smatch what; + std::cout << "Expression: \"" << regx << "\"\n"; + std::cout << "Text: \"" << text << "\"\n"; + if(boost::regex_match(text, what, e, boost::match_extra)) + { + unsigned i, j; + std::cout << "** Match found **\n Sub-Expressions:\n"; + for(i = 0; i < what.size(); ++i) + std::cout << " $" << i << " = \"" << what[i] << "\"\n"; + std::cout << " Captures:\n"; + for(i = 0; i < what.size(); ++i) + { + std::cout << " $" << i << " = {"; + for(j = 0; j < what.captures(i).size(); ++j) + { + if(j) + std::cout << ", "; + else + std::cout << " "; + std::cout << "\"" << what.captures(i)[j] << "\""; + } + std::cout << " }\n"; + } + } + else + { + std::cout << "** No Match found **\n"; + } +} + +int main(int , char* []) +{ + print_captures("(([[:lower:]]+)|([[:upper:]]+))+", "aBBcccDDDDDeeeeeeee"); + print_captures("a(b+|((c)*))+d", "abd"); + print_captures("(.*)bar|(.*)bah", "abcbar"); + print_captures("(.*)bar|(.*)bah", "abcbah"); + print_captures("^(?:(\\w+)|(?>\\W+))*$", "now is the time for all good men to come to the aid of the party"); + print_captures("^(?>(\\w+)\\W*)*$", "now is the time for all good men to come to the aid of the party"); + print_captures("^(\\w+)\\W+(?>(\\w+)\\W+)*(\\w+)$", "now is the time for all good men to come to the aid of the party"); + print_captures("^(\\w+)\\W+(?>(\\w+)\\W+(?:(\\w+)\\W+){0,2})*(\\w+)$", "now is the time for all good men to come to the aid of the party"); + return 0; +} + diff --git a/libs/regex/example/snippets/credit_card_example.cpp b/libs/regex/example/snippets/credit_card_example.cpp new file mode 100644 index 0000000000..cb7f8d520c --- /dev/null +++ b/libs/regex/example/snippets/credit_card_example.cpp @@ -0,0 +1,67 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE credit_card_example.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Credit card number formatting code. + */ + +#include <string> +#include <boost/regex.hpp> + +bool validate_card_format(const std::string& s) +{ + static const boost::regex e("(\\d{4}[- ]){3}\\d{4}"); + return boost::regex_match(s, e); +} + +const boost::regex e("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"); +const std::string machine_format("\\1\\2\\3\\4"); +const std::string human_format("\\1-\\2-\\3-\\4"); + +std::string machine_readable_card_number(const std::string& s) +{ + return boost::regex_replace(s, e, machine_format, boost::match_default | boost::format_sed); +} + +std::string human_readable_card_number(const std::string& s) +{ + return boost::regex_replace(s, e, human_format, boost::match_default | boost::format_sed); +} + +#include <iostream> +using namespace std; + +int main() +{ + string s[4] = { "0000111122223333", "0000 1111 2222 3333", + "0000-1111-2222-3333", "000-1111-2222-3333", }; + int i; + for(i = 0; i < 4; ++i) + { + cout << "validate_card_format(\"" << s[i] << "\") returned " << validate_card_format(s[i]) << endl; + } + for(i = 0; i < 4; ++i) + { + cout << "machine_readable_card_number(\"" << s[i] << "\") returned " << machine_readable_card_number(s[i]) << endl; + } + for(i = 0; i < 4; ++i) + { + cout << "human_readable_card_number(\"" << s[i] << "\") returned " << human_readable_card_number(s[i]) << endl; + } + return 0; +} + + + + diff --git a/libs/regex/example/snippets/icu_example.cpp b/libs/regex/example/snippets/icu_example.cpp new file mode 100644 index 0000000000..6d1fc3bec1 --- /dev/null +++ b/libs/regex/example/snippets/icu_example.cpp @@ -0,0 +1,188 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE mfc_example.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: examples of using Boost.Regex with MFC and ATL string types. + */ + +#include <boost/regex/config.hpp> + +#ifdef BOOST_HAS_ICU + +#include <boost/regex/icu.hpp> +#include <iostream> +#include <assert.h> + +// +// Find out if *password* meets our password requirements, +// as defined by the regular expression *requirements*. +// +bool is_valid_password(const U_NAMESPACE_QUALIFIER UnicodeString& password, const U_NAMESPACE_QUALIFIER UnicodeString& requirements) +{ + return boost::u32regex_match(password, boost::make_u32regex(requirements)); +} + +// +// Extract filename part of a path from a UTF-8 encoded std::string and return the result +// as another std::string: +// +std::string get_filename(const std::string& path) +{ + boost::u32regex r = boost::make_u32regex("(?:\\A|.*\\\\)([^\\\\]+)"); + boost::smatch what; + if(boost::u32regex_match(path, what, r)) + { + // extract $1 as a std::string: + return what.str(1); + } + else + { + throw std::runtime_error("Invalid pathname"); + } +} + +U_NAMESPACE_QUALIFIER UnicodeString extract_greek(const U_NAMESPACE_QUALIFIER UnicodeString& text) +{ + // searches through some UTF-16 encoded text for a block encoded in Greek, + // this expression is imperfect, but the best we can do for now - searching + // for specific scripts is actually pretty hard to do right. + boost::u32regex r = boost::make_u32regex(L"[\\x{370}-\\x{3FF}](?:[^[:L*:]]|[\\x{370}-\\x{3FF}])*"); + boost::u16match what; + if(boost::u32regex_search(text, what, r)) + { + // extract $0 as a UnicodeString: + return U_NAMESPACE_QUALIFIER UnicodeString(what[0].first, what.length(0)); + } + else + { + throw std::runtime_error("No Greek found!"); + } +} + +void enumerate_currencies(const std::string& text) +{ + // enumerate and print all the currency symbols, along + // with any associated numeric values: + const char* re = + "([[:Sc:]][[:Cf:][:Cc:][:Z*:]]*)?" + "([[:Nd:]]+(?:[[:Po:]][[:Nd:]]+)?)?" + "(?(1)" + "|(?(2)" + "[[:Cf:][:Cc:][:Z*:]]*" + ")" + "[[:Sc:]]" + ")"; + boost::u32regex r = boost::make_u32regex(re); + boost::u32regex_iterator<std::string::const_iterator> i(boost::make_u32regex_iterator(text, r)), j; + while(i != j) + { + std::cout << (*i)[0] << std::endl; + ++i; + } +} + +void enumerate_currencies2(const std::string& text) +{ + // enumerate and print all the currency symbols, along + // with any associated numeric values: + const char* re = + "([[:Sc:]][[:Cf:][:Cc:][:Z*:]]*)?" + "([[:Nd:]]+(?:[[:Po:]][[:Nd:]]+)?)?" + "(?(1)" + "|(?(2)" + "[[:Cf:][:Cc:][:Z*:]]*" + ")" + "[[:Sc:]]" + ")"; + boost::u32regex r = boost::make_u32regex(re); + boost::u32regex_token_iterator<std::string::const_iterator> + i(boost::make_u32regex_token_iterator(text, r, 1)), j; + while(i != j) + { + std::cout << *i << std::endl; + ++i; + } +} + + +// +// Take a credit card number as a string of digits, +// and reformat it as a human readable string with "-" +// separating each group of four digit;, +// note that we're mixing a UTF-32 regex, with a UTF-16 +// string and a UTF-8 format specifier, and it still all +// just works: +// +const boost::u32regex e = boost::make_u32regex("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"); +const char* human_format = "$1-$2-$3-$4"; + +U_NAMESPACE_QUALIFIER UnicodeString human_readable_card_number(const U_NAMESPACE_QUALIFIER UnicodeString& s) +{ + return boost::u32regex_replace(s, e, human_format); +} + + +int main() +{ + // password checks using u32regex_match: + U_NAMESPACE_QUALIFIER UnicodeString pwd = "abcDEF---"; + U_NAMESPACE_QUALIFIER UnicodeString pwd_check = "(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}"; + bool b = is_valid_password(pwd, pwd_check); + assert(b); + pwd = "abcD-"; + b = is_valid_password(pwd, pwd_check); + assert(!b); + // filename extraction with u32regex_match: + std::string file = "abc.hpp"; + file = get_filename(file); + assert(file == "abc.hpp"); + file = "c:\\a\\b\\c\\d.h"; + file = get_filename(file); + assert(file == "d.h"); + + // Greek text extraction with u32regex_search: + const UChar t[] = { + 'S', 'o', 'm', 'e', ' ', 'w', 'h', 'e', 'r', 'e', ' ', 'i', 'n', 0x0391, 0x039D, 0x0395, 0x0398, 0x0391, 0 + }; + const UChar g[] = { + 0x0391, 0x039D, 0x0395, 0x0398, 0x0391, 0 + }; + U_NAMESPACE_QUALIFIER UnicodeString text = t; + U_NAMESPACE_QUALIFIER UnicodeString greek = extract_greek(text); + assert(greek == g); + + // extract currency symbols with associated value, use iterator interface: + std::string text2 = " $100.23 or \xC2\xA3""198.12 "; // \xC2\xA3 is the pound sign encoded in UTF-8 + enumerate_currencies(text2); + enumerate_currencies2(text2); + + U_NAMESPACE_QUALIFIER UnicodeString credit_card_number = "1234567887654321"; + credit_card_number = human_readable_card_number(credit_card_number); + assert(credit_card_number == "1234-5678-8765-4321"); + return 0; +} + +#else + +#include <iostream> + +int main() +{ + std::cout << "<NOTE>ICU support not enabled, feature unavailable</NOTE>"; + return 0; +} + + +#endif + diff --git a/libs/regex/example/snippets/mfc_example.cpp b/libs/regex/example/snippets/mfc_example.cpp new file mode 100644 index 0000000000..4b3ae62bae --- /dev/null +++ b/libs/regex/example/snippets/mfc_example.cpp @@ -0,0 +1,162 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE mfc_example.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: examples of using Boost.Regex with MFC and ATL string types. + */ + +#ifdef TEST_MFC + +#include <boost/regex/mfc.hpp> +#include <cstringt.h> +#include <atlstr.h> +#include <assert.h> +#include <tchar.h> +#include <iostream> + +#ifdef _UNICODE +#define cout wcout +#endif + +// +// Find out if *password* meets our password requirements, +// as defined by the regular expression *requirements*. +// +bool is_valid_password(const CString& password, const CString& requirements) +{ + return boost::regex_match(password, boost::make_regex(requirements)); +} + +// +// Extract filename part of a path from a CString and return the result +// as another CString: +// +CString get_filename(const CString& path) +{ + boost::tregex r(__T("(?:\\A|.*\\\\)([^\\\\]+)")); + boost::tmatch what; + if(boost::regex_match(path, what, r)) + { + // extract $1 as a CString: + return CString(what[1].first, what.length(1)); + } + else + { + throw std::runtime_error("Invalid pathname"); + } +} + +CString extract_postcode(const CString& address) +{ + // searches throw address for a UK postcode and returns the result, + // the expression used is by Phil A. on www.regxlib.com: + boost::tregex r(__T("^(([A-Z]{1,2}[0-9]{1,2})|([A-Z]{1,2}[0-9][A-Z]))\\s?([0-9][A-Z]{2})$")); + boost::tmatch what; + if(boost::regex_search(address, what, r)) + { + // extract $0 as a CString: + return CString(what[0].first, what.length()); + } + else + { + throw std::runtime_error("No postcode found"); + } +} + +void enumerate_links(const CString& html) +{ + // enumerate and print all the <a> links in some HTML text, + // the expression used is by Andew Lee on www.regxlib.com: + boost::tregex r(__T("href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']")); + boost::tregex_iterator i(boost::make_regex_iterator(html, r)), j; + while(i != j) + { + std::cout << (*i)[1] << std::endl; + ++i; + } +} + +void enumerate_links2(const CString& html) +{ + // enumerate and print all the <a> links in some HTML text, + // the expression used is by Andew Lee on www.regxlib.com: + boost::tregex r(__T("href=[\"\']((http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?)[\"\']")); + boost::tregex_token_iterator i(boost::make_regex_token_iterator(html, r, 1)), j; + while(i != j) + { + std::cout << *i << std::endl; + ++i; + } +} + +// +// Take a credit card number as a string of digits, +// and reformat it as a human readable string with "-" +// separating each group of four digits: +// +const boost::tregex e(__T("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z")); +const CString human_format = __T("$1-$2-$3-$4"); + +CString human_readable_card_number(const CString& s) +{ + return boost::regex_replace(s, e, human_format); +} + + +int main() +{ + // password checks using regex_match: + CString pwd = "abcDEF---"; + CString pwd_check = "(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}"; + bool b = is_valid_password(pwd, pwd_check); + assert(b); + pwd = "abcD-"; + b = is_valid_password(pwd, pwd_check); + assert(!b); + + // filename extraction with regex_match: + CString file = "abc.hpp"; + file = get_filename(file); + assert(file == "abc.hpp"); + file = "c:\\a\\b\\c\\d.h"; + file = get_filename(file); + assert(file == "d.h"); + + // postcode extraction with regex_search: + CString address = "Joe Bloke, 001 Somestreet, Somewhere,\nPL2 8AB"; + CString postcode = extract_postcode(address); + assert(postcode = "PL2 8NV"); + + // html link extraction with regex_iterator: + CString text = "<dt><a href=\"syntax_perl.html\">Perl Regular Expressions</a></dt><dt><a href=\"syntax_extended.html\">POSIX-Extended Regular Expressions</a></dt><dt><a href=\"syntax_basic.html\">POSIX-Basic Regular Expressions</a></dt>"; + enumerate_links(text); + enumerate_links2(text); + + CString credit_card_number = "1234567887654321"; + credit_card_number = human_readable_card_number(credit_card_number); + assert(credit_card_number == "1234-5678-8765-4321"); + return 0; +} + +#else + +#include <iostream> + +int main() +{ + std::cout << "<NOTE>MFC support not enabled, feature unavailable</NOTE>"; + return 0; +} + +#endif diff --git a/libs/regex/example/snippets/partial_regex_grep.cpp b/libs/regex/example/snippets/partial_regex_grep.cpp new file mode 100644 index 0000000000..5d1fca0755 --- /dev/null +++ b/libs/regex/example/snippets/partial_regex_grep.cpp @@ -0,0 +1,109 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE partial_regex_grep.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Search example using partial matches. + */ + +#include <iostream> +#include <fstream> +#include <sstream> +#include <string> +#include <cstring> +#include <boost/regex.hpp> + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ using ::memmove; } +#endif + +// match some kind of html tag: +boost::regex e("<[^>]*>"); +// count how many: +unsigned int tags = 0; +// saved position of partial match: +const char* next_pos = 0; + +bool grep_callback(const boost::match_results<const char*>& m) +{ + if(m[0].matched == false) + { + // save position and return: + next_pos = m[0].first; + } + else + ++tags; + return true; +} + +void search(std::istream& is) +{ + char buf[4096]; + next_pos = buf + sizeof(buf); + bool have_more = true; + while(have_more) + { + // how much do we copy forward from last try: + std::ptrdiff_t leftover = (buf + sizeof(buf)) - next_pos; + // and how much is left to fill: + std::ptrdiff_t size = next_pos - buf; + // copy forward whatever we have left: + std::memmove(buf, next_pos, leftover); + // fill the rest from the stream: + is.read(buf + leftover, size); + std::streamsize read = is.gcount(); + // check to see if we've run out of text: + have_more = read == size; + // reset next_pos: + next_pos = buf + sizeof(buf); + // and then grep: + boost::regex_grep<bool(*)(const boost::cmatch&), const char*>(grep_callback, + static_cast<const char*>(buf), + static_cast<const char*>(buf + read + leftover), + e, + boost::match_default | boost::match_partial); + } +} + +int main(int argc, char* argv[]) +{ + if(argc > 1) + { + for(int i = 1; i < argc; ++i) + { + std::ifstream fs(argv[i]); + if(fs.bad()) continue; + search(fs); + fs.close(); + } + } + else + { + std::string one("<META NAME=\"keywords\" CONTENT=\"regex++, regular expressions, regular expression library, C++\">"); + std::string what; + while(what.size() < 10000) + { + what.append(one); + what.append(13, ' '); + } + std::stringstream ss; + ss.str(what); + search(ss); + } + std::cout << "total tag count was " << tags << std::endl; + return 0; +} + + + + diff --git a/libs/regex/example/snippets/partial_regex_iterate.cpp b/libs/regex/example/snippets/partial_regex_iterate.cpp new file mode 100644 index 0000000000..065438abfc --- /dev/null +++ b/libs/regex/example/snippets/partial_regex_iterate.cpp @@ -0,0 +1,118 @@ +/* + * + * Copyright (c) 1998-2007 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE partial_regex_iterate.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Search example using partial matches. + */ + +#include <iostream> +#include <fstream> +#include <sstream> +#include <string> +#include <cstring> +#include <boost/regex.hpp> + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ using ::memmove; } +#endif + +// match some kind of html tag: +boost::regex e("<[^>]*>"); +// count how many: +unsigned int tags = 0; + +void search(std::istream& is) +{ + // buffer we'll be searching in: + char buf[4096]; + // saved position of end of partial match: + const char* next_pos = buf + sizeof(buf); + // flag to indicate whether there is more input to come: + bool have_more = true; + + while(have_more) + { + // how much do we copy forward from last try: + std::ptrdiff_t leftover = (buf + sizeof(buf)) - next_pos; + // and how much is left to fill: + std::ptrdiff_t size = next_pos - buf; + // copy forward whatever we have left: + std::memmove(buf, next_pos, leftover); + // fill the rest from the stream: + is.read(buf + leftover, size); + std::streamsize read = is.gcount(); + // check to see if we've run out of text: + have_more = read == size; + // reset next_pos: + next_pos = buf + sizeof(buf); + // and then iterate: + boost::cregex_iterator a( + buf, + buf + read + leftover, + e, + boost::match_default | boost::match_partial); + boost::cregex_iterator b; + + while(a != b) + { + if((*a)[0].matched == false) + { + // Partial match, save position and break: + next_pos = (*a)[0].first; + break; + } + else + { + // full match: + ++tags; + } + + // move to next match: + ++a; + } + } +} + +int main(int argc, char* argv[]) +{ + if(argc > 1) + { + for(int i = 1; i < argc; ++i) + { + std::ifstream fs(argv[i]); + if(fs.bad()) continue; + search(fs); + fs.close(); + } + } + else + { + std::string one("<META NAME=\"keywords\" CONTENT=\"regex++, regular expressions, regular expression library, C++\">"); + std::string what; + while(what.size() < 10000) + { + what.append(one); + what.append(13, ' '); + } + std::stringstream ss; + ss.str(what); + search(ss); + } + std::cout << "total tag count was " << tags << std::endl; + return 0; +} + + + + diff --git a/libs/regex/example/snippets/partial_regex_match.cpp b/libs/regex/example/snippets/partial_regex_match.cpp new file mode 100644 index 0000000000..36d23144bc --- /dev/null +++ b/libs/regex/example/snippets/partial_regex_match.cpp @@ -0,0 +1,69 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE partial_regex_match.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_match example using partial matches. + */ + +#include <string> +#include <iostream> +#include <boost/regex.hpp> + +boost::regex e("(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})"); + +bool is_possible_card_number(const std::string& input) +{ + // + // return false for partial match, true for full match, or throw for + // impossible match based on what we have so far... + boost::match_results<std::string::const_iterator> what; + if(0 == boost::regex_match(input, what, e, boost::match_default | boost::match_partial)) + { + // the input so far could not possibly be valid so reject it: + throw std::runtime_error("Invalid data entered - this could not possibly be a valid card number"); + } + // OK so far so good, but have we finished? + if(what[0].matched) + { + // excellent, we have a result: + return true; + } + // what we have so far is only a partial match... + return false; +} + +int main(int argc, char* argv[]) +{ + try{ + std::string input; + if(argc > 1) + input = argv[1]; + else + std::cin >> input; + if(is_possible_card_number(input)) + { + std::cout << "Matched OK..." << std::endl; + } + else + std::cout << "Got a partial match..." << std::endl; + } + catch(const std::exception& e) + { + std::cout << e.what() << std::endl; + } + return 0; +} + + + diff --git a/libs/regex/example/snippets/regex_grep_example_1.cpp b/libs/regex/example/snippets/regex_grep_example_1.cpp new file mode 100644 index 0000000000..e0f3f3e859 --- /dev/null +++ b/libs/regex/example/snippets/regex_grep_example_1.cpp @@ -0,0 +1,131 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_grep_example_1.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_grep example 1: searches a cpp file for class definitions. + */ + +#include <string> +#include <map> +#include <boost/regex.hpp> + +// purpose: +// takes the contents of a file in the form of a string +// and searches for all the C++ class definitions, storing +// their locations in a map of strings/int's + +typedef std::map<std::string, std::string::difference_type, std::less<std::string> > map_type; + +const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + +boost::regex expression(re); + +class IndexClassesPred +{ + map_type& m; + std::string::const_iterator base; +public: + IndexClassesPred(map_type& a, std::string::const_iterator b) : m(a), base(b) {} + bool operator()(const boost::match_results<std::string::const_iterator>& what) + { + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + m[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - base; + return true; + } +private: + IndexClassesPred& operator=(const IndexClassesPred&); +}; + +void IndexClasses(map_type& m, const std::string& file) +{ + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + boost::regex_grep(IndexClassesPred(m, start), start, end, expression); +} + + +#include <fstream> +#include <iostream> + +using namespace std; + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, const char** argv) +{ + std::string text; + for(int i = 1; i < argc; ++i) + { + cout << "Processing file " << argv[i] << endl; + map_type m; + std::ifstream fs(argv[i]); + load_file(text, fs); + fs.close(); + IndexClasses(m, text); + cout << m.size() << " matches found" << endl; + map_type::iterator c, d; + c = m.begin(); + d = m.end(); + while(c != d) + { + cout << "class \"" << (*c).first << "\" found at index: " << (*c).second << endl; + ++c; + } + } + return 0; +} + + + + + + + diff --git a/libs/regex/example/snippets/regex_grep_example_2.cpp b/libs/regex/example/snippets/regex_grep_example_2.cpp new file mode 100644 index 0000000000..f012e56666 --- /dev/null +++ b/libs/regex/example/snippets/regex_grep_example_2.cpp @@ -0,0 +1,122 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_grep_example_2.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_grep example 2: searches a cpp file for class definitions, + * using a global callback function. + */ + +#include <string> +#include <map> +#include <boost/regex.hpp> + +// purpose: +// takes the contents of a file in the form of a string +// and searches for all the C++ class definitions, storing +// their locations in a map of strings/int's + +typedef std::map<std::string, std::string::difference_type, std::less<std::string> > map_type; + +const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + + +boost::regex expression(re); +map_type class_index; +std::string::const_iterator base; + +bool grep_callback(const boost::match_results<std::string::const_iterator>& what) +{ + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + class_index[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - base; + return true; +} + +void IndexClasses(const std::string& file) +{ + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + base = start; + boost::regex_grep(grep_callback, start, end, expression); +} + +#include <fstream> +#include <iostream> + +using namespace std; + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, const char** argv) +{ + std::string text; + for(int i = 1; i < argc; ++i) + { + cout << "Processing file " << argv[i] << endl; + std::ifstream fs(argv[i]); + load_file(text, fs); + fs.close(); + IndexClasses(text); + cout << class_index.size() << " matches found" << endl; + map_type::iterator c, d; + c = class_index.begin(); + d = class_index.end(); + while(c != d) + { + cout << "class \"" << (*c).first << "\" found at index: " << (*c).second << endl; + ++c; + } + class_index.erase(class_index.begin(), class_index.end()); + } + return 0; +} + + + diff --git a/libs/regex/example/snippets/regex_grep_example_3.cpp b/libs/regex/example/snippets/regex_grep_example_3.cpp new file mode 100644 index 0000000000..02aaa72402 --- /dev/null +++ b/libs/regex/example/snippets/regex_grep_example_3.cpp @@ -0,0 +1,148 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_grep_example_3.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_grep example 3: searches a cpp file for class definitions, + * using a bound member function callback. + */ + +#include <string> +#include <map> +#include <boost/regex.hpp> +#include <functional> +#include <boost/detail/workaround.hpp> + +// purpose: +// takes the contents of a file in the form of a string +// and searches for all the C++ class definitions, storing +// their locations in a map of strings/int's + +typedef std::map<std::string, std::string::difference_type, std::less<std::string> > map_type; + +const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + + +class class_index +{ + boost::regex expression; + map_type index; + std::string::const_iterator base; + + bool grep_callback(boost::match_results<std::string::const_iterator> what); +public: + map_type& get_map() { return index; } + void IndexClasses(const std::string& file); + class_index() + : expression(re) {} +}; + +bool class_index::grep_callback(boost::match_results<std::string::const_iterator> what) +{ + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + index[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - base; + return true; +} + +void class_index::IndexClasses(const std::string& file) +{ + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + base = start; +#if BOOST_WORKAROUND(_MSC_VER, < 1300) && !defined(_STLP_VERSION) + boost::regex_grep(std::bind1st(std::mem_fun1(&class_index::grep_callback), this), + start, + end, + expression); +#else + boost::regex_grep(std::bind1st(std::mem_fun(&class_index::grep_callback), this), + start, + end, + expression); +#endif +} + + +#include <fstream> +#include <iostream> + +using namespace std; + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, const char** argv) +{ + std::string text; + for(int i = 1; i < argc; ++i) + { + cout << "Processing file " << argv[i] << endl; + std::ifstream fs(argv[i]); + load_file(text, fs); + fs.close(); + class_index idx; + idx.IndexClasses(text); + cout << idx.get_map().size() << " matches found" << endl; + map_type::iterator c, d; + c = idx.get_map().begin(); + d = idx.get_map().end(); + while(c != d) + { + cout << "class \"" << (*c).first << "\" found at index: " << (*c).second << endl; + ++c; + } + } + return 0; +} + + + + + + diff --git a/libs/regex/example/snippets/regex_grep_example_4.cpp b/libs/regex/example/snippets/regex_grep_example_4.cpp new file mode 100644 index 0000000000..5217f1c125 --- /dev/null +++ b/libs/regex/example/snippets/regex_grep_example_4.cpp @@ -0,0 +1,155 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_grep_example_4.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_grep example 4: searches a cpp file for class definitions, + * using a C++ Builder closure as a callback. + */ + +#ifdef __BORLANDC__ + +#include <string> +#include <map> +#include <boost/regex.hpp> +#include <functional> + +// purpose: +// takes the contents of a file in the form of a string +// and searches for all the C++ class definitions, storing +// their locations in a map of strings/int's + +typedef std::map<std::string, int, std::less<std::string> > map_type; + +const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + + +class class_index +{ + boost::regex expression; + map_type index; + std::string::const_iterator base; + typedef boost::match_results<std::string::const_iterator> arg_type; + + bool grep_callback(const boost::match_results<std::string::const_iterator>& what); +public: + map_type& get_map() { return index; } + typedef bool (__closure* grep_callback_type)(const arg_type&); + void IndexClasses(const std::string& file); + class_index() + : index(), + expression(re) + {} +}; + +bool class_index::grep_callback(const boost::match_results<std::string::const_iterator>& what) +{ + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + index[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - base; + return true; +} + +void class_index::IndexClasses(const std::string& file) +{ + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + base = start; + class_index::grep_callback_type cl = &(this->grep_callback); + boost::regex_grep(cl, + start, + end, + expression); +} + + +#include <fstream> +#include <iostream> + +using namespace std; + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + s.reserve(is.rdbuf()->in_avail()); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, const char** argv) +{ + std::string text; + for(int i = 1; i < argc; ++i) + { + cout << "Processing file " << argv[i] << endl; + std::ifstream fs(argv[i]); + load_file(text, fs); + fs.close(); + class_index i; + i.IndexClasses(text); + cout << i.get_map().size() << " matches found" << endl; + map_type::iterator c, d; + c = i.get_map().begin(); + d = i.get_map().end(); + while(c != d) + { + cout << "class \"" << (*c).first << "\" found at index: " << (*c).second << endl; + ++c; + } + } + return 0; +} + +#else // __BORLANDC__ + +int main() +{ + return 0; +} + + +#endif + + + + diff --git a/libs/regex/example/snippets/regex_iterator_example.cpp b/libs/regex/example/snippets/regex_iterator_example.cpp new file mode 100644 index 0000000000..3fe1420d66 --- /dev/null +++ b/libs/regex/example/snippets/regex_iterator_example.cpp @@ -0,0 +1,114 @@ +/* + * + * Copyright (c) 2003 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_iterator_example_2.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_iterator example 2: searches a cpp file for class definitions, + * using global data. + */ + +#include <string> +#include <map> +#include <fstream> +#include <iostream> +#include <boost/regex.hpp> + +using namespace std; + +// purpose: +// takes the contents of a file in the form of a string +// and searches for all the C++ class definitions, storing +// their locations in a map of strings/int's + +typedef std::map<std::string, std::string::difference_type, std::less<std::string> > map_type; + +const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + + +boost::regex expression(re); +map_type class_index; + +bool regex_callback(const boost::match_results<std::string::const_iterator>& what) +{ + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + class_index[what[5].str() + what[6].str()] = what.position(5); + return true; +} + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, const char** argv) +{ + std::string text; + for(int i = 1; i < argc; ++i) + { + cout << "Processing file " << argv[i] << endl; + std::ifstream fs(argv[i]); + load_file(text, fs); + fs.close(); + // construct our iterators: + boost::sregex_iterator m1(text.begin(), text.end(), expression); + boost::sregex_iterator m2; + std::for_each(m1, m2, ®ex_callback); + // copy results: + cout << class_index.size() << " matches found" << endl; + map_type::iterator c, d; + c = class_index.begin(); + d = class_index.end(); + while(c != d) + { + cout << "class \"" << (*c).first << "\" found at index: " << (*c).second << endl; + ++c; + } + class_index.erase(class_index.begin(), class_index.end()); + } + return 0; +} + + + diff --git a/libs/regex/example/snippets/regex_match_example.cpp b/libs/regex/example/snippets/regex_match_example.cpp new file mode 100644 index 0000000000..f714f94b98 --- /dev/null +++ b/libs/regex/example/snippets/regex_match_example.cpp @@ -0,0 +1,105 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_match_example.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: ftp based regex_match example. + */ + +#include <cstdlib> +#include <stdlib.h> +#include <boost/regex.hpp> +#include <string> +#include <iostream> + +using namespace std; +using namespace boost; + +regex expression("^([0-9]+)(\\-| |$)(.*)$"); + +// process_ftp: +// on success returns the ftp response code, and fills +// msg with the ftp response message. +int process_ftp(const char* response, std::string* msg) +{ + cmatch what; + if(regex_match(response, what, expression)) + { + // what[0] contains the whole string + // what[1] contains the response code + // what[2] contains the separator character + // what[3] contains the text message. + if(msg) + msg->assign(what[3].first, what[3].second); + return ::atoi(what[1].first); + } + // failure did not match + if(msg) + msg->erase(); + return -1; +} + +#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && (__BORLANDC__ == 0x550)) +// +// problem with std::getline under MSVC6sp3 +istream& getline(istream& is, std::string& s) +{ + s.erase(); + char c = static_cast<char>(is.get()); + while(c != '\n') + { + s.append(1, c); + c = static_cast<char>(is.get()); + } + return is; +} +#endif + +int main(int argc, const char*[]) +{ + std::string in, out; + do + { + if(argc == 1) + { + cout << "enter test string" << endl; + getline(cin, in); + if(in == "quit") + break; + } + else + in = "100 this is an ftp message text"; + int result; + result = process_ftp(in.c_str(), &out); + if(result != -1) + { + cout << "Match found:" << endl; + cout << "Response code: " << result << endl; + cout << "Message text: " << out << endl; + } + else + { + cout << "Match not found" << endl; + } + cout << endl; + } while(argc == 1); + return 0; +} + + + + + + + + diff --git a/libs/regex/example/snippets/regex_merge_example.cpp b/libs/regex/example/snippets/regex_merge_example.cpp new file mode 100644 index 0000000000..fcc4f5f7a3 --- /dev/null +++ b/libs/regex/example/snippets/regex_merge_example.cpp @@ -0,0 +1,137 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_merge_example.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_merge example: + * converts a C++ file to syntax highlighted HTML. + */ + +#include <iostream> +#include <fstream> +#include <sstream> +#include <string> +#include <iterator> +#include <boost/regex.hpp> +#include <fstream> +#include <iostream> + +// purpose: +// takes the contents of a file and transform to +// syntax highlighted code in html format + +boost::regex e1, e2; +extern const char* expression_text; +extern const char* format_string; +extern const char* pre_expression; +extern const char* pre_format; +extern const char* header_text; +extern const char* footer_text; + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, const char** argv) +{ + try{ + e1.assign(expression_text); + e2.assign(pre_expression); + for(int i = 1; i < argc; ++i) + { + std::cout << "Processing file " << argv[i] << std::endl; + std::ifstream fs(argv[i]); + std::string in; + load_file(in, fs); + fs.close(); + std::string out_name = std::string(argv[i]) + std::string(".htm"); + std::ofstream os(out_name.c_str()); + os << header_text; + // strip '<' and '>' first by outputting to a + // temporary string stream + std::ostringstream t(std::ios::out | std::ios::binary); + std::ostream_iterator<char> oi(t); + boost::regex_merge(oi, in.begin(), in.end(), e2, pre_format, boost::match_default | boost::format_all); + // then output to final output stream + // adding syntax highlighting: + std::string s(t.str()); + std::ostream_iterator<char> out(os); + boost::regex_merge(out, s.begin(), s.end(), e1, format_string, boost::match_default | boost::format_all); + os << footer_text; + os.close(); + } + } + catch(...) + { return -1; } + return 0; +} + +const char* pre_expression = "(<)|(>)|\\r"; +const char* pre_format = "(?1<)(?2>)"; + + +const char* expression_text = // preprocessor directives: index 1 + "(^[[:blank:]]*#(?:[^\\\\\\n]|\\\\[^\\n[:punct:][:word:]]*[\\n[:punct:][:word:]])*)|" + // comment: index 2 + "(//[^\\n]*|/\\*.*?\\*/)|" + // literals: index 3 + "\\<([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\\>|" + // string literals: index 4 + "('(?:[^\\\\']|\\\\.)*'|\"(?:[^\\\\\"]|\\\\.)*\")|" + // keywords: index 5 + "\\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import" + "|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall" + "|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool" + "|break|case|catch|cdecl|char|class|const|const_cast|continue|default|delete" + "|do|double|dynamic_cast|else|enum|explicit|extern|false|float|for|friend|goto" + "|if|inline|int|long|mutable|namespace|new|operator|pascal|private|protected" + "|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_cast" + "|struct|switch|template|this|throw|true|try|typedef|typeid|typename|union|unsigned" + "|using|virtual|void|volatile|wchar_t|while)\\>" + ; + +const char* format_string = "(?1<font color=\"#008040\">$&</font>)" + "(?2<I><font color=\"#000080\">$&</font></I>)" + "(?3<font color=\"#0000A0\">$&</font>)" + "(?4<font color=\"#0000FF\">$&</font>)" + "(?5<B>$&</B>)"; + +const char* header_text = "<HTML>\n<HEAD>\n" + "<TITLE>Auto-generated html formated source</TITLE>\n" + "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1252\">\n" + "</HEAD>\n" + "<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n" + "<P> </P>\n<PRE>"; + +const char* footer_text = "</PRE>\n</BODY>\n\n"; + + + + + + + + + + + diff --git a/libs/regex/example/snippets/regex_replace_example.cpp b/libs/regex/example/snippets/regex_replace_example.cpp new file mode 100644 index 0000000000..3120453c39 --- /dev/null +++ b/libs/regex/example/snippets/regex_replace_example.cpp @@ -0,0 +1,138 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_replace_example.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_replace example: + * converts a C++ file to syntax highlighted HTML. + */ + +#include <iostream> +#include <fstream> +#include <sstream> +#include <string> +#include <iterator> +#include <boost/regex.hpp> +#include <fstream> +#include <iostream> + +// purpose: +// takes the contents of a file and transform to +// syntax highlighted code in html format + +boost::regex e1, e2; +extern const char* expression_text; +extern const char* format_string; +extern const char* pre_expression; +extern const char* pre_format; +extern const char* header_text; +extern const char* footer_text; + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, const char** argv) +{ + try{ + e1.assign(expression_text); + e2.assign(pre_expression); + for(int i = 1; i < argc; ++i) + { + std::cout << "Processing file " << argv[i] << std::endl; + std::ifstream fs(argv[i]); + std::string in; + load_file(in, fs); + fs.close(); + std::string out_name = std::string(argv[i]) + std::string(".htm"); + std::ofstream os(out_name.c_str()); + os << header_text; + // strip '<' and '>' first by outputting to a + // temporary string stream + std::ostringstream t(std::ios::out | std::ios::binary); + std::ostream_iterator<char> oi(t); + boost::regex_replace(oi, in.begin(), in.end(), e2, pre_format, boost::match_default | boost::format_all); + // then output to final output stream + // adding syntax highlighting: + std::string s(t.str()); + std::ostream_iterator<char> out(os); + boost::regex_replace(out, s.begin(), s.end(), e1, format_string, boost::match_default | boost::format_all); + os << footer_text; + os.close(); + } + } + catch(...) + { return -1; } + return 0; +} + +const char* pre_expression = "(<)|(>)|(&)|\\r"; +const char* pre_format = "(?1<)(?2>)(?3&)"; + + +const char* expression_text = // preprocessor directives: index 1 + "(^[[:blank:]]*#(?:[^\\\\\\n]|\\\\[^\\n[:punct:][:word:]]*[\\n[:punct:][:word:]])*)|" + // comment: index 2 + "(//[^\\n]*|/\\*.*?\\*/)|" + // literals: index 3 + "\\<([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\\>|" + // string literals: index 4 + "('(?:[^\\\\']|\\\\.)*'|\"(?:[^\\\\\"]|\\\\.)*\")|" + // keywords: index 5 + "\\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import" + "|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall" + "|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool" + "|break|case|catch|cdecl|char|class|const|const_cast|continue|default|delete" + "|do|double|dynamic_cast|else|enum|explicit|extern|false|float|for|friend|goto" + "|if|inline|int|long|mutable|namespace|new|operator|pascal|private|protected" + "|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_cast" + "|struct|switch|template|this|throw|true|try|typedef|typeid|typename|union|unsigned" + "|using|virtual|void|volatile|wchar_t|while)\\>" + ; + +const char* format_string = "(?1<font color=\"#008040\">$&</font>)" + "(?2<I><font color=\"#000080\">$&</font></I>)" + "(?3<font color=\"#0000A0\">$&</font>)" + "(?4<font color=\"#0000FF\">$&</font>)" + "(?5<B>$&</B>)"; + +const char* header_text = "<HTML>\n<HEAD>\n" + "<TITLE>Auto-generated html formated source</TITLE>\n" + "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1252\">\n" + "</HEAD>\n" + "<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n" + "<P> </P>\n<PRE>"; + +const char* footer_text = "</PRE>\n</BODY>\n\n"; + + + + + + + + + + + + diff --git a/libs/regex/example/snippets/regex_search_example.cpp b/libs/regex/example/snippets/regex_search_example.cpp new file mode 100644 index 0000000000..761a11b239 --- /dev/null +++ b/libs/regex/example/snippets/regex_search_example.cpp @@ -0,0 +1,129 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_search_example.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_search example: searches a cpp file for class definitions. + */ + +#include <string> +#include <map> +#include <boost/regex.hpp> + +// purpose: +// takes the contents of a file in the form of a string +// and searches for all the C++ class definitions, storing +// their locations in a map of strings/int's + +typedef std::map<std::string, std::string::difference_type, std::less<std::string> > map_type; + +const char* re = + // possibly leading whitespace: + "^[[:space:]]*" + // possible template declaration: + "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + // class or struct: + "(class|struct)[[:space:]]*" + // leading declspec macros etc: + "(" + "\\<\\w+\\>" + "(" + "[[:blank:]]*\\([^)]*\\)" + ")?" + "[[:space:]]*" + ")*" + // the class name + "(\\<\\w*\\>)[[:space:]]*" + // template specialisation parameters + "(<[^;:{]+>)?[[:space:]]*" + // terminate in { or : + "(\\{|:[^;\\{()]*\\{)"; + + +boost::regex expression(re); + +void IndexClasses(map_type& m, const std::string& file) +{ + std::string::const_iterator start, end; + start = file.begin(); + end = file.end(); + boost::match_results<std::string::const_iterator> what; + boost::match_flag_type flags = boost::match_default; + while(boost::regex_search(start, end, what, expression, flags)) + { + // what[0] contains the whole string + // what[5] contains the class name. + // what[6] contains the template specialisation if any. + // add class name and position to map: + m[std::string(what[5].first, what[5].second) + std::string(what[6].first, what[6].second)] = + what[5].first - file.begin(); + // update search position: + start = what[0].second; + // update flags: + flags |= boost::match_prev_avail; + flags |= boost::match_not_bob; + } +} + + +#include <iostream> +#include <fstream> + +using namespace std; + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, const char** argv) +{ + std::string text; + for(int i = 1; i < argc; ++i) + { + cout << "Processing file " << argv[i] << endl; + map_type m; + std::ifstream fs(argv[i]); + load_file(text, fs); + fs.close(); + IndexClasses(m, text); + cout << m.size() << " matches found" << endl; + map_type::iterator c, d; + c = m.begin(); + d = m.end(); + while(c != d) + { + cout << "class \"" << (*c).first << "\" found at index: " << (*c).second << endl; + ++c; + } + } + return 0; +} + + + + + + + + + diff --git a/libs/regex/example/snippets/regex_split_example_1.cpp b/libs/regex/example/snippets/regex_split_example_1.cpp new file mode 100644 index 0000000000..4db5bdd0df --- /dev/null +++ b/libs/regex/example/snippets/regex_split_example_1.cpp @@ -0,0 +1,76 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_split_example_1.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_split example: split a string into tokens. + */ + + +#include <list> +#include <boost/regex.hpp> + + +unsigned tokenise(std::list<std::string>& l, std::string& s) +{ + return boost::regex_split(std::back_inserter(l), s); +} + +#include <iostream> +using namespace std; + + +#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && (__BORLANDC__ == 0x550)) +// +// problem with std::getline under MSVC6sp3 +istream& getline(istream& is, std::string& s) +{ + s.erase(); + char c = static_cast<char>(is.get()); + while(c != '\n') + { + s.append(1, c); + c = static_cast<char>(is.get()); + } + return is; +} +#endif + + +int main(int argc, const char*[]) +{ + string s; + list<string> l; + do{ + if(argc == 1) + { + cout << "Enter text to split (or \"quit\" to exit): "; + getline(cin, s); + if(s == "quit") break; + } + else + s = "This is a string of tokens"; + unsigned result = tokenise(l, s); + cout << result << " tokens found" << endl; + cout << "The remaining text is: \"" << s << "\"" << endl; + while(l.size()) + { + s = *(l.begin()); + l.pop_front(); + cout << s << endl; + } + }while(argc == 1); + return 0; +} + + diff --git a/libs/regex/example/snippets/regex_split_example_2.cpp b/libs/regex/example/snippets/regex_split_example_2.cpp new file mode 100644 index 0000000000..205e588cdf --- /dev/null +++ b/libs/regex/example/snippets/regex_split_example_2.cpp @@ -0,0 +1,86 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_split_example_2.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_split example: spit out linked URL's. + */ + + +#include <list> +#include <fstream> +#include <iostream> +#include <iterator> +#include <boost/regex.hpp> + +boost::regex e("<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"", + boost::regex::normal | boost::regbase::icase); + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + // + // attempt to grow string buffer to match file size, + // this doesn't always work... + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + // use logarithmic growth stategy, in case + // in_avail (above) returned zero: + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, char** argv) +{ + std::string s; + std::list<std::string> l; + int i; + for(i = 1; i < argc; ++i) + { + std::cout << "Findings URL's in " << argv[i] << ":" << std::endl; + s.erase(); + std::ifstream is(argv[i]); + load_file(s, is); + is.close(); + boost::regex_split(std::back_inserter(l), s, e); + while(l.size()) + { + s = *(l.begin()); + l.pop_front(); + std::cout << s << std::endl; + } + } + // + // alternative method: + // split one match at a time and output direct to + // cout via ostream_iterator<std::string>.... + // + for(i = 1; i < argc; ++i) + { + std::cout << "Findings URL's in " << argv[i] << ":" << std::endl; + s.erase(); + std::ifstream is(argv[i]); + load_file(s, is); + is.close(); + while(boost::regex_split(std::ostream_iterator<std::string>(std::cout), s, e, boost::match_default, 1)) std::cout << std::endl; + } + + return 0; +} + + diff --git a/libs/regex/example/snippets/regex_token_iterator_eg_1.cpp b/libs/regex/example/snippets/regex_token_iterator_eg_1.cpp new file mode 100644 index 0000000000..f1ecb44de6 --- /dev/null +++ b/libs/regex/example/snippets/regex_token_iterator_eg_1.cpp @@ -0,0 +1,72 @@ +/* + * + * Copyright (c) 12003 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_token_iterator_example_1.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_token_iterator example: split a string into tokens. + */ + + +#include <boost/regex.hpp> + +#include <iostream> +using namespace std; + + +#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && (__BORLANDC__ == 0x550)) +// +// problem with std::getline under MSVC6sp3 +istream& getline(istream& is, std::string& s) +{ + s.erase(); + char c = static_cast<char>(is.get()); + while(c != '\n') + { + s.append(1, c); + c = static_cast<char>(is.get()); + } + return is; +} +#endif + + +int main(int argc, const char*[]) +{ + string s; + do{ + if(argc == 1) + { + cout << "Enter text to split (or \"quit\" to exit): "; + getline(cin, s); + if(s == "quit") break; + } + else + s = "This is a string of tokens"; + + boost::regex re("\\s+"); + boost::sregex_token_iterator i(s.begin(), s.end(), re, -1); + boost::sregex_token_iterator j; + + unsigned count = 0; + while(i != j) + { + cout << *i++ << endl; + count++; + } + cout << "There were " << count << " tokens found." << endl; + + }while(argc == 1); + return 0; +} + + diff --git a/libs/regex/example/snippets/regex_token_iterator_eg_2.cpp b/libs/regex/example/snippets/regex_token_iterator_eg_2.cpp new file mode 100644 index 0000000000..e3e43de964 --- /dev/null +++ b/libs/regex/example/snippets/regex_token_iterator_eg_2.cpp @@ -0,0 +1,89 @@ +/* + * + * Copyright (c) 2003 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_token_iterator_example_2.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: regex_token_iterator example: spit out linked URL's. + */ + + +#include <fstream> +#include <iostream> +#include <iterator> +#include <boost/regex.hpp> + +boost::regex e("<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"", + boost::regex::normal | boost::regbase::icase); + +void load_file(std::string& s, std::istream& is) +{ + s.erase(); + if(is.bad()) return; + // + // attempt to grow string buffer to match file size, + // this doesn't always work... + s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail())); + char c; + while(is.get(c)) + { + // use logarithmic growth stategy, in case + // in_avail (above) returned zero: + if(s.capacity() == s.size()) + s.reserve(s.capacity() * 3); + s.append(1, c); + } +} + +int main(int argc, char** argv) +{ + std::string s; + int i; + for(i = 1; i < argc; ++i) + { + std::cout << "Findings URL's in " << argv[i] << ":" << std::endl; + s.erase(); + std::ifstream is(argv[i]); + load_file(s, is); + is.close(); + boost::sregex_token_iterator i(s.begin(), s.end(), e, 1); + boost::sregex_token_iterator j; + while(i != j) + { + std::cout << *i++ << std::endl; + } + } + // + // alternative method: + // test the array-literal constructor, and split out the whole + // match as well as $1.... + // + for(i = 1; i < argc; ++i) + { + std::cout << "Findings URL's in " << argv[i] << ":" << std::endl; + s.erase(); + std::ifstream is(argv[i]); + load_file(s, is); + is.close(); + const int subs[] = {1, 0,}; + boost::sregex_token_iterator i(s.begin(), s.end(), e, subs); + boost::sregex_token_iterator j; + while(i != j) + { + std::cout << *i++ << std::endl; + } + } + + return 0; +} + + diff --git a/libs/regex/example/timer/bc55.mak b/libs/regex/example/timer/bc55.mak new file mode 100644 index 0000000000..44795fc6cc --- /dev/null +++ b/libs/regex/example/timer/bc55.mak @@ -0,0 +1,51 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for timer.exe +# +# Borland C++ tools +# +# BCROOT defines the root directory of your bc builder install +# + +!ifndef BCROOT +BCROOT=$(MAKEDIR)\.. +!endif + +BCC32 = $(BCROOT)\bin\Bcc32.exe + +IDE_LinkFLAGS32 = -L$(BCROOT)\LIB +COMPOPTS= -O2 -tWC -tWM- -Vx -Ve -D_NO_VCL; -I../../../../; -L..\..\build\bcb5 + + +timer.exe : regex_timer.cpp + $(BCC32) @&&| + $(COMPOPTS) -e$@ regex_timer.cpp +| + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/regex/example/timer/bcb4.mak b/libs/regex/example/timer/bcb4.mak new file mode 100644 index 0000000000..372b647d48 --- /dev/null +++ b/libs/regex/example/timer/bcb4.mak @@ -0,0 +1,51 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for timer.exe +# +# Borland C++ tools +# +# BCROOT defines the root directory of your bc builder install +# + +!ifndef BCROOT +BCROOT=$(MAKEDIR)\.. +!endif + +BCC32 = $(BCROOT)\bin\Bcc32.exe + +IDE_LinkFLAGS32 = -L$(BCROOT)\LIB +COMPOPTS= -O2 -tWC -tWM- -Vx -Ve -D_NO_VCL; -I../../../../; -L..\..\build\bcb4 + + +timer.exe : regex_timer.cpp + $(BCC32) @&&| + $(COMPOPTS) -e$@ regex_timer.cpp +| + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/regex/example/timer/bcb5.mak b/libs/regex/example/timer/bcb5.mak new file mode 100644 index 0000000000..44795fc6cc --- /dev/null +++ b/libs/regex/example/timer/bcb5.mak @@ -0,0 +1,51 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for timer.exe +# +# Borland C++ tools +# +# BCROOT defines the root directory of your bc builder install +# + +!ifndef BCROOT +BCROOT=$(MAKEDIR)\.. +!endif + +BCC32 = $(BCROOT)\bin\Bcc32.exe + +IDE_LinkFLAGS32 = -L$(BCROOT)\LIB +COMPOPTS= -O2 -tWC -tWM- -Vx -Ve -D_NO_VCL; -I../../../../; -L..\..\build\bcb5 + + +timer.exe : regex_timer.cpp + $(BCC32) @&&| + $(COMPOPTS) -e$@ regex_timer.cpp +| + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/regex/example/timer/gcc.mak b/libs/regex/example/timer/gcc.mak new file mode 100644 index 0000000000..2faf641892 --- /dev/null +++ b/libs/regex/example/timer/gcc.mak @@ -0,0 +1,38 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for timer.exe +# +# GNU compiler GCC +# +CXX= $(INCLUDES) -I../../../../ -I./ $(CXXFLAGS) + +timer : regex_timer.cpp + g++ $(CXX) -O2 -o timer regex_timer.cpp -L../../build/gcc $(LDFLAGS) -lboost_regex $(LIBS) + +debug : regex_timer.cpp timer.cpp + g++ $(CXX) -g -o timer regex_timer.cpp -L../../build/gcc $(LDFLAGS) -lboost_regex_debug $(LIBS) + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/regex/example/timer/input_script.txt b/libs/regex/example/timer/input_script.txt new file mode 100644 index 0000000000..4a9e3e2df9 --- /dev/null +++ b/libs/regex/example/timer/input_script.txt @@ -0,0 +1,14 @@ +abc +aaaaaaaaaaabcccccccc +quit +^([0-9]+)(\-| |$)(.*)$ +100- this is a line of ftp response which contains a message string +quit +quit + +# Copyright 2007 John Maddock. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt). + + diff --git a/libs/regex/example/timer/regex_timer.cpp b/libs/regex/example/timer/regex_timer.cpp new file mode 100644 index 0000000000..630eddd299 --- /dev/null +++ b/libs/regex/example/timer/regex_timer.cpp @@ -0,0 +1,386 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#ifdef _MSC_VER +#pragma warning(disable: 4996 4127) +#endif + +#include <string> +#include <algorithm> +#include <deque> +#include <iterator> + +#ifdef BOOST_RE_OLD_IOSTREAM +#include <iostream.h> +#include <fstream.h> +#else +#include <iostream> +#include <fstream> +using std::cout; +using std::cin; +using std::cerr; +using std::istream; +using std::ostream; +using std::endl; +using std::ifstream; +using std::streambuf; +using std::getline; +#endif + +#include <boost/config.hpp> +#include <boost/regex.hpp> +#include <boost/cregex.hpp> +#include <boost/timer.hpp> +#include <boost/smart_ptr.hpp> + +#if defined(_WIN32) && defined(BOOST_REGEX_USE_WIN32_LOCALE) +#include <windows.h> +#endif + +#if (defined(_MSC_VER) && (_MSC_VER <= 1300)) || defined(__sgi) +// maybe no Koenig lookup, use using declaration instead: +using namespace boost; +#endif + +#ifndef BOOST_NO_WREGEX +ostream& operator << (ostream& os, const std::wstring& s) +{ + std::wstring::const_iterator i, j; + i = s.begin(); + j = s.end(); + while(i != j) + { + os.put(static_cast<char>(*i)); + ++i; + } + return os; +} +#endif + +template <class S> +class string_out_iterator +#ifndef BOOST_NO_STD_ITERATOR + : public std::iterator<std::output_iterator_tag, void, void, void, void> +#endif // ndef BOOST_NO_STD_ITERATOR +{ +#ifdef BOOST_NO_STD_ITERATOR + typedef std::output_iterator_tag iterator_category; + typedef void value_type; + typedef void difference_type; + typedef void pointer; + typedef void reference; +#endif // BOOST_NO_STD_ITERATOR + + S* out; +public: + string_out_iterator(S& s) : out(&s) {} + string_out_iterator& operator++() { return *this; } + string_out_iterator& operator++(int) { return *this; } + string_out_iterator& operator*() { return *this; } + string_out_iterator& operator=(typename S::value_type v) + { + out->append(1, v); + return *this; + } +}; + +namespace boost{ +#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && (__BORLANDC__ == 0x550)) || defined(__SGI_STL_PORT) +// +// problem with std::getline under MSVC6sp3 +// and C++ Builder 5.5, is this really that hard? +istream& getline(istream& is, std::string& s) +{ + s.erase(); + char c = static_cast<char>(is.get()); + while(c != '\n') + { + BOOST_ASSERT(is.good()); + s.append(1, c); + c = static_cast<char>(is.get()); + } + return is; +} +#else +istream& getline(istream& is, std::string& s) +{ + std::getline(is, s); + if(s.size() && (s[s.size() -1] == '\r')) + s.erase(s.size() - 1); + return is; +} +#endif +} + + +int main(int argc, char**argv) +{ + ifstream ifs; + std::istream* p_in = &std::cin; + if(argc == 2) + { + ifs.open(argv[1]); + ifs.peek(); + if(!ifs.good()) + { + cout << "Bad filename: " << argv[1] << endl; + return -1; + } + p_in = &ifs; + } + + boost::regex ex; + boost::match_results<std::string::const_iterator> sm; +#ifndef BOOST_NO_WREGEX + std::wstring ws1, ws2; + boost::wregex wex; + boost::match_results<std::wstring::const_iterator> wsm; +#endif + boost::match_results<std::deque<char>::iterator> dm; + std::string s1, s2, ts; + std::deque<char> ds; + boost::regex_tA r; + boost::scoped_array<boost::regmatch_t> matches; + std::size_t nsubs; + boost::timer t; + double tim; + int result = 0; + unsigned iters = 100; + double wait_time = (std::min)(t.elapsed_min() * 1000, 0.5); + + while(true) + { + cout << "Enter expression (or \"quit\" to exit): "; + boost::getline(*p_in, s1); + if(argc == 2) + cout << endl << s1 << endl; + if(s1 == "quit") + break; +#ifndef BOOST_NO_WREGEX + ws1.erase(); + std::copy(s1.begin(), s1.end(), string_out_iterator<std::wstring>(ws1)); +#endif + try{ + ex.assign(s1); +#ifndef BOOST_NO_WREGEX + wex.assign(ws1); +#endif + } + catch(std::exception& e) + { + cout << "Error in expression: \"" << e.what() << "\"" << endl; + continue; + } + int code = regcompA(&r, s1.c_str(), boost::REG_PERL); + if(code != 0) + { + char buf[256]; + regerrorA(code, &r, buf, 256); + cout << "regcompA error: \"" << buf << "\"" << endl; + continue; + } + nsubs = r.re_nsub + 1; + matches.reset(new boost::regmatch_t[nsubs]); + + while(true) + { + cout << "Enter string to search (or \"quit\" to exit): "; + boost::getline(*p_in, s2); + if(argc == 2) + cout << endl << s2 << endl; + if(s2 == "quit") + break; + +#ifndef BOOST_NO_WREGEX + ws2.erase(); + std::copy(s2.begin(), s2.end(), string_out_iterator<std::wstring>(ws2)); +#endif + ds.erase(ds.begin(), ds.end()); + std::copy(s2.begin(), s2.end(), std::back_inserter(ds)); + + unsigned i; + iters = 10; + tim = 1.1; + +#if defined(_WIN32) && defined(BOOST_REGEX_USE_WIN32_LOCALE) + MSG msg; + PeekMessage(&msg, 0, 0, 0, 0); + Sleep(0); +#endif + + // cache load: + regex_search(s2, sm, ex); + + // measure time interval for basic_regex<char> + do{ + iters *= static_cast<unsigned>((tim > 0.001) ? (1.1/tim) : 100); + t.restart(); + for(i =0; i < iters; ++i) + { + result = regex_search(s2, sm, ex); + } + tim = t.elapsed(); + }while(tim < wait_time); + + cout << "regex time: " << (tim * 1000000 / iters) << "us" << endl; + if(result) + { + for(i = 0; i < sm.size(); ++i) + { + ts = sm[i]; + cout << "\tmatch " << i << ": \""; + cout << ts; + cout << "\" (matched=" << sm[i].matched << ")" << endl; + } + cout << "\tmatch $`: \""; + cout << std::string(sm[-1]); + cout << "\" (matched=" << sm[-1].matched << ")" << endl; + cout << "\tmatch $': \""; + cout << std::string(sm[-2]); + cout << "\" (matched=" << sm[-2].matched << ")" << endl << endl; + } + +#ifndef BOOST_NO_WREGEX + // measure time interval for boost::wregex + iters = 10; + tim = 1.1; + // cache load: + regex_search(ws2, wsm, wex); + do{ + iters *= static_cast<unsigned>((tim > 0.001) ? (1.1/tim) : 100); + t.restart(); + for(i = 0; i < iters; ++i) + { + result = regex_search(ws2, wsm, wex); + } + tim = t.elapsed(); + }while(tim < wait_time); + cout << "wregex time: " << (tim * 1000000 / iters) << "us" << endl; + if(result) + { + std::wstring tw; + for(i = 0; i < wsm.size(); ++i) + { + tw.erase(); + std::copy(wsm[i].first, wsm[i].second, string_out_iterator<std::wstring>(tw)); + cout << "\tmatch " << i << ": \"" << tw; + cout << "\" (matched=" << sm[i].matched << ")" << endl; + } + cout << "\tmatch $`: \""; + tw.erase(); + std::copy(wsm[-1].first, wsm[-1].second, string_out_iterator<std::wstring>(tw)); + cout << tw; + cout << "\" (matched=" << sm[-1].matched << ")" << endl; + cout << "\tmatch $': \""; + tw.erase(); + std::copy(wsm[-2].first, wsm[-2].second, string_out_iterator<std::wstring>(tw)); + cout << tw; + cout << "\" (matched=" << sm[-2].matched << ")" << endl << endl; + } +#endif + + // measure time interval for basic_regex<char> using a deque + iters = 10; + tim = 1.1; + // cache load: + regex_search(ds.begin(), ds.end(), dm, ex); + do{ + iters *= static_cast<unsigned>((tim > 0.001) ? (1.1/tim) : 100); + t.restart(); + for(i = 0; i < iters; ++i) + { + result = regex_search(ds.begin(), ds.end(), dm, ex); + } + tim = t.elapsed(); + }while(tim < wait_time); + cout << "regex time (search over std::deque<char>): " << (tim * 1000000 / iters) << "us" << endl; + + if(result) + { + for(i = 0; i < dm.size(); ++i) + { + ts.erase(); + std::copy(dm[i].first, dm[i].second, string_out_iterator<std::string>(ts)); + cout << "\tmatch " << i << ": \"" << ts; + cout << "\" (matched=" << sm[i].matched << ")" << endl; + } + cout << "\tmatch $`: \""; + ts.erase(); + std::copy(dm[-1].first, dm[-1].second, string_out_iterator<std::string>(ts)); + cout << ts; + cout << "\" (matched=" << sm[-1].matched << ")" << endl; + cout << "\tmatch $': \""; + ts.erase(); + std::copy(dm[-2].first, dm[-2].second, string_out_iterator<std::string>(ts)); + cout << ts; + cout << "\" (matched=" << sm[-2].matched << ")" << endl << endl; + } + + // measure time interval for POSIX matcher: + iters = 10; + tim = 1.1; + // cache load: + regexecA(&r, s2.c_str(), nsubs, matches.get(), 0); + do{ + iters *= static_cast<unsigned>((tim > 0.001) ? (1.1/tim) : 100); + t.restart(); + for(i = 0; i < iters; ++i) + { + result = regexecA(&r, s2.c_str(), nsubs, matches.get(), 0); + } + tim = t.elapsed(); + }while(tim < wait_time); + cout << "POSIX regexecA time: " << (tim * 1000000 / iters) << "us" << endl; + + if(result == 0) + { + for(i = 0; i < nsubs; ++i) + { + if(matches[i].rm_so >= 0) + { + ts.assign(s2.begin() + matches[i].rm_so, s2.begin() + matches[i].rm_eo); + cout << "\tmatch " << i << ": \"" << ts << "\" (matched=" << (matches[i].rm_so != -1) << ")"<< endl; + } + else + cout << "\tmatch " << i << ": \"\" (matched=" << (matches[i].rm_so != -1) << ")" << endl; // no match + } + cout << "\tmatch $`: \""; + ts.erase(); + ts.assign(s2.begin(), s2.begin() + matches[0].rm_so); + cout << ts; + cout << "\" (matched=" << (matches[0].rm_so != 0) << ")" << endl; + cout << "\tmatch $': \""; + ts.erase(); + ts.assign(s2.begin() + matches[0].rm_eo, s2.end()); + cout << ts; + cout << "\" (matched=" << (matches[0].rm_eo != (int)s2.size()) << ")" << endl << endl; + } + } + regfreeA(&r); + } + + return 0; +} + +#if defined(_WIN32) && defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(UNDER_CE) +#pragma comment(lib, "user32.lib") +#endif + + + + + + + + + + + diff --git a/libs/regex/example/timer/vc6-stlport.mak b/libs/regex/example/timer/vc6-stlport.mak new file mode 100644 index 0000000000..1b5f686dd1 --- /dev/null +++ b/libs/regex/example/timer/vc6-stlport.mak @@ -0,0 +1,39 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# very basic VC6 makefile for timer +# +CXX=cl +CXXFLAGS=/Oityb1 /GF /Gy -MT -GX -DSTRICT -I../../../../ -I./ +LIBS=/link /LIBPATH:..\..\build\vc6-stlport kernel32.lib user32.lib +EXE=.exe +OBJ=.obj + +LIBDEP= ../../../../boost/regex/detail/regex_options.hpp ../../../../boost/regex/detail/regex_config.hpp + +regex_timer$(EXE) : regex_timer$(OBJ) + $(CXX) -o timer$(EXE) regex_timer$(OBJ) $(LIBS) + +regex_timer$(OBJ) : regex_timer.cpp $(LIBDEP) + $(CXX) -c $(CXXFLAGS) regex_timer.cpp + +timer$(OBJ) : ../../../timer/timer.cpp $(LIBDEP) + $(CXX) -c $(CXXFLAGS) ../../../timer/timer.cpp + + + + + + + + + + + + + + + + diff --git a/libs/regex/example/timer/vc6.mak b/libs/regex/example/timer/vc6.mak new file mode 100644 index 0000000000..c611195fae --- /dev/null +++ b/libs/regex/example/timer/vc6.mak @@ -0,0 +1,39 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. +# +# very basic VC6 makefile for timer +# +CXX=cl +CXXFLAGS=/Oityb1 /GF /Gy -GX -DSTRICT -I../../../../ -I./ +LIBS=/link /LIBPATH:..\..\build\vc6 +EXE=.exe +OBJ=.obj + +LIBDEP= ../../../../boost/regex/detail/regex_options.hpp ../../../../boost/regex/detail/regex_config.hpp + +regex_timer$(EXE) : regex_timer$(OBJ) + $(CXX) -o timer$(EXE) regex_timer$(OBJ) $(LIBS) + +regex_timer$(OBJ) : regex_timer.cpp $(LIBDEP) + $(CXX) -c $(CXXFLAGS) regex_timer.cpp + +timer$(OBJ) : ../../../timer/timer.cpp $(LIBDEP) + $(CXX) -c $(CXXFLAGS) ../../../timer/timer.cpp + + + + + + + + + + + + + + + + diff --git a/libs/regex/index.html b/libs/regex/index.html new file mode 100644 index 0000000000..df7430bd0e --- /dev/null +++ b/libs/regex/index.html @@ -0,0 +1,15 @@ +<html> + <head> + <meta http-equiv="refresh" content="0; URL=doc/html/index.html"> + </head> + <body> + <P> + Automatic redirection failed, please go to <a href="doc/html/index.html">doc/html/index.html</a>. + </P> + <P>Copyright John Maddock 2001</P> + <P>Distributed under the Boost Software License, Version 1.0. (See accompanying file <A href="../../LICENSE_1_0.txt"> + LICENSE_1_0.txt</A> or copy at <A href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</A>).</P> + </body> +</html> + + diff --git a/libs/regex/performance/Jamfile.v2 b/libs/regex/performance/Jamfile.v2 new file mode 100644 index 0000000000..ca47cb9ee9 --- /dev/null +++ b/libs/regex/performance/Jamfile.v2 @@ -0,0 +1,56 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +SOURCES = command_line main time_boost time_greta time_localised_boost time_pcre time_dynamic_xpressive time_posix time_safe_greta ; + +local HS_REGEX_PATH = [ modules.peek : HS_REGEX_PATH ] ; +local USE_POSIX = [ modules.peek : USE_POSIX ] ; +local PCRE_PATH = [ modules.peek : PCRE_PATH ] ; +local USE_PCRE = [ modules.peek : USE_PCRE ] ; + +if $(HS_REGEX_PATH) +{ + HS_SOURCES = $(HS_REGEX_PATH)/regcomp.c $(HS_REGEX_PATH)/regerror.c $(HS_REGEX_PATH)/regexec.c $(HS_REGEX_PATH)/regfree.c ; + POSIX_OPTS = <define>BOOST_HAS_POSIX=1 <include>$(HS_REGEX_PATH) ; +} +else if $(USE_POSIX) +{ + POSIX_OPTS = <define>BOOST_HAS_POSIX=1 ; +} + +lib pcre : : <name>pcre ; + +if $(PCRE_PATH) +{ + PCRE_SOURCES = $(PCRE_PATH)/chartables.c $(PCRE_PATH)/get.c $(PCRE_PATH)/pcre.c $(PCRE_PATH)/study.c ; + PCRE_OPTS = <define>BOOST_HAS_PCRE=1 <include>$(PCRE_PATH) ; +} +else if $(USE_PCRE) +{ + PCRE_OPTS = <define>BOOST_HAS_PCRE=1 ; + PCRE_SOURCES = pcre ; +} + + +exe regex_comparison : + $(SOURCES).cpp + $(HS_SOURCES) + $(PCRE_SOURCES) + ../build//boost_regex + ../../test/build//boost_prg_exec_monitor/<link>static + : + <define>BOOST_REGEX_NO_LIB=1 + <define>BOOST_REGEX_STATIC_LINK=1 + $(POSIX_OPTS) + $(PCRE_OPTS) + ; + + +install . : regex_comparison ; + + + + + diff --git a/libs/regex/performance/command_line.cpp b/libs/regex/performance/command_line.cpp new file mode 100644 index 0000000000..bdebc7a164 --- /dev/null +++ b/libs/regex/performance/command_line.cpp @@ -0,0 +1,556 @@ +/* + * + * Copyright (c) 2002-2003 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include <iostream> +#include <iomanip> +#include <fstream> +#include <deque> +#include <sstream> +#include <stdexcept> +#include <iterator> +#include <boost/regex.hpp> +#include <boost/version.hpp> +#include "regex_comparison.hpp" + +#ifdef BOOST_HAS_PCRE +#include "pcre.h" // for pcre version number +#endif + +// +// globals: +// +bool time_boost = false; +bool time_localised_boost = false; +bool time_greta = false; +bool time_safe_greta = false; +bool time_posix = false; +bool time_pcre = false; +bool time_xpressive = false; +bool time_std = false; + +bool test_matches = false; +bool test_code = false; +bool test_html = false; +bool test_short_twain = false; +bool test_long_twain = false; + + +std::string html_template_file; +std::string html_out_file; +std::string html_contents; +std::list<results> result_list; + +// the following let us compute averages: +double greta_total = 0; +double safe_greta_total = 0; +double boost_total = 0; +double locale_boost_total = 0; +double posix_total = 0; +double pcre_total = 0; +double xpressive_total = 0; +double std_total = 0; +unsigned greta_test_count = 0; +unsigned safe_greta_test_count = 0; +unsigned boost_test_count = 0; +unsigned locale_boost_test_count = 0; +unsigned posix_test_count = 0; +unsigned pcre_test_count = 0; +unsigned xpressive_test_count = 0; +unsigned std_test_count = 0; + +int handle_argument(const std::string& what) +{ + if(what == "-b") + time_boost = true; + else if(what == "-bl") + time_localised_boost = true; +#ifdef BOOST_HAS_GRETA + else if(what == "-g") + time_greta = true; + else if(what == "-gs") + time_safe_greta = true; +#endif +#ifdef BOOST_HAS_POSIX + else if(what == "-posix") + time_posix = true; +#endif +#ifdef BOOST_HAS_PCRE + else if(what == "-pcre") + time_pcre = true; +#endif +#ifdef BOOST_HAS_XPRESSIVE + else if(what == "-xpressive" || what == "-dxpr") + time_xpressive = true; +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + else if(what == "-std") + time_std = true; +#endif + else if(what == "-all") + { + time_boost = true; + time_localised_boost = true; +#ifdef BOOST_HAS_GRETA + time_greta = true; + time_safe_greta = true; +#endif +#ifdef BOOST_HAS_POSIX + time_posix = true; +#endif +#ifdef BOOST_HAS_PCRE + time_pcre = true; +#endif +#ifdef BOOST_HAS_XPRESSIVE + time_xpressive = true; +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + time_std = true; +#endif + } + else if(what == "-test-matches") + test_matches = true; + else if(what == "-test-code") + test_code = true; + else if(what == "-test-html") + test_html = true; + else if(what == "-test-short-twain") + test_short_twain = true; + else if(what == "-test-long-twain") + test_long_twain = true; + else if(what == "-test-all") + { + test_matches = true; + test_code = true; + test_html = true; + test_short_twain = true; + test_long_twain = true; + } + else if((what == "-h") || (what == "--help")) + return show_usage(); + else if((what[0] == '-') || (what[0] == '/')) + { + std::cerr << "Unknown argument: \"" << what << "\"" << std::endl; + return 1; + } + else if(html_template_file.size() == 0) + { + html_template_file = what; + load_file(html_contents, what.c_str()); + } + else if(html_out_file.size() == 0) + html_out_file = what; + else + { + std::cerr << "Unexpected argument: \"" << what << "\"" << std::endl; + return 1; + } + return 0; +} + +int show_usage() +{ + std::cout << + "Usage\n" + "regex_comparison [-h] [library options] [test options] [html_template html_output_file]\n" + " -h Show help\n\n" + " library options:\n" + " -b Apply tests to boost library\n" + " -bl Apply tests to boost library with C++ locale\n" +#ifdef BOOST_HAS_GRETA + " -g Apply tests to GRETA library\n" + " -gs Apply tests to GRETA library (in non-recursive mode)\n" +#endif +#ifdef BOOST_HAS_POSIX + " -posix Apply tests to POSIX library\n" +#endif +#ifdef BOOST_HAS_PCRE + " -pcre Apply tests to PCRE library\n" +#endif +#ifdef BOOST_HAS_XPRESSIVE + " -dxpr Apply tests to dynamic xpressive library\n" +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + " -std Apply tests to std::regex.\n" +#endif + " -all Apply tests to all libraries\n\n" + " test options:\n" + " -test-matches Test short matches\n" + " -test-code Test c++ code examples\n" + " -test-html Test c++ code examples\n" + " -test-short-twain Test short searches\n" + " -test-long-twain Test long searches\n" + " -test-all Test everthing\n"; + return 1; +} + +void load_file(std::string& text, const char* file) +{ + std::deque<char> temp_copy; + std::ifstream is(file); + if(!is.good()) + { + std::string msg("Unable to open file: \""); + msg.append(file); + msg.append("\""); + throw std::runtime_error(msg); + } + is.seekg(0, std::ios_base::end); + std::istream::pos_type pos = is.tellg(); + is.seekg(0, std::ios_base::beg); + text.erase(); + text.reserve(pos); + std::istreambuf_iterator<char> it(is); + std::copy(it, std::istreambuf_iterator<char>(), std::back_inserter(text)); +} + +void print_result(std::ostream& os, double time, double best) +{ + static const char* suffixes[] = {"s", "ms", "us", "ns", "ps", }; + + if(time < 0) + { + os << "<td>NA</td>"; + return; + } + double rel = time / best; + bool highlight = ((rel > 0) && (rel < 1.1)); + unsigned suffix = 0; + while(time < 0) + { + time *= 1000; + ++suffix; + } + os << "<td>"; + if(highlight) + os << "<font color=\"#008000\">"; + if(rel <= 1000) + os << std::setprecision(3) << rel; + else + os << (int)rel; + os << "<BR>("; + if(time <= 1000) + os << std::setprecision(3) << time; + else + os << (int)time; + os << suffixes[suffix] << ")"; + if(highlight) + os << "</font>"; + os << "</td>"; +} + +std::string html_quote(const std::string& in) +{ + static const boost::regex e("(<)|(>)|(&)|(\")"); + static const std::string format("(?1<)(?2>)(?3&)(?4")"); + return regex_replace(in, e, format, boost::match_default | boost::format_all); +} + +void output_html_results(bool show_description, const std::string& tagname) +{ + std::stringstream os; + if(result_list.size()) + { + // + // start by outputting the table header: + // + os << "<table border=\"1\" cellspacing=\"1\">\n"; + os << "<tr><td><strong>Expression</strong></td>"; + if(show_description) + os << "<td><strong>Text</strong></td>"; +#if defined(BOOST_HAS_GRETA) + if(time_greta == true) + os << "<td><strong>GRETA</strong></td>"; + if(time_safe_greta == true) + os << "<td><strong>GRETA<BR>(non-recursive mode)</strong></td>"; +#endif + if(time_boost == true) + os << "<td><strong>Boost</strong></td>"; + if(time_localised_boost == true) + os << "<td><strong>Boost + C++ locale</strong></td>"; +#if defined(BOOST_HAS_POSIX) + if(time_posix == true) + os << "<td><strong>POSIX</strong></td>"; +#endif +#ifdef BOOST_HAS_PCRE + if(time_pcre == true) + os << "<td><strong>PCRE</strong></td>"; +#endif +#ifdef BOOST_HAS_XPRESSIVE + if(time_xpressive == true) + os << "<td><strong>Dynamic Xpressive</strong></td>"; +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + if(time_std == true) + os << "<td><strong>std::regex</strong></td>"; +#endif + os << "</tr>\n"; + + // + // Now enumerate through all the test results: + // + std::list<results>::const_iterator first, last; + first = result_list.begin(); + last = result_list.end(); + while(first != last) + { + os << "<tr><td><code>" << html_quote(first->expression) << "</code></td>"; + if(show_description) + os << "<td>" << html_quote(first->description) << "</td>"; +#if defined(BOOST_HAS_GRETA) + if(time_greta == true) + { + print_result(os, first->greta_time, first->factor); + if(first->greta_time > 0) + { + greta_total += first->greta_time / first->factor; + ++greta_test_count; + } + } + if(time_safe_greta == true) + { + print_result(os, first->safe_greta_time, first->factor); + if(first->safe_greta_time > 0) + { + safe_greta_total += first->safe_greta_time / first->factor; + ++safe_greta_test_count; + } + } +#endif + if(time_boost == true) + { + print_result(os, first->boost_time, first->factor); + if(first->boost_time > 0) + { + boost_total += first->boost_time / first->factor; + ++boost_test_count; + } + } + if(time_localised_boost == true) + { + print_result(os, first->localised_boost_time, first->factor); + if(first->localised_boost_time > 0) + { + locale_boost_total += first->localised_boost_time / first->factor; + ++locale_boost_test_count; + } + } + if(time_posix == true) + { + print_result(os, first->posix_time, first->factor); + if(first->posix_time > 0) + { + posix_total += first->posix_time / first->factor; + ++posix_test_count; + } + } +#if defined(BOOST_HAS_PCRE) + if(time_pcre == true) + { + print_result(os, first->pcre_time, first->factor); + if(first->pcre_time > 0) + { + pcre_total += first->pcre_time / first->factor; + ++pcre_test_count; + } + } +#endif +#if defined(BOOST_HAS_XPRESSIVE) + if(time_xpressive == true) + { + print_result(os, first->xpressive_time, first->factor); + if(first->xpressive_time > 0) + { + xpressive_total += first->xpressive_time / first->factor; + ++xpressive_test_count; + } + } +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + if(time_std == true) + { + print_result(os, first->std_time, first->factor); + if(first->std_time > 0) + { + std_total += first->std_time / first->factor; + ++std_test_count; + } + } +#endif + os << "</tr>\n"; + ++first; + } + os << "</table>\n"; + result_list.clear(); + } + else + { + os << "<P><I>Results not available...</I></P>\n"; + } + + std::string result = os.str(); + + std::string::size_type pos = html_contents.find(tagname); + if(pos != std::string::npos) + { + html_contents.replace(pos, tagname.size(), result); + } +} + +std::string get_boost_version() +{ + std::stringstream os; + os << (BOOST_VERSION / 100000) << '.' << ((BOOST_VERSION / 100) % 1000) << '.' << (BOOST_VERSION % 100); + return os.str(); +} + +std::string get_averages_table() +{ + std::stringstream os; + // + // start by outputting the table header: + // + os << "<table border=\"1\" cellspacing=\"1\">\n"; + os << "<tr>"; +#if defined(BOOST_HAS_GRETA) + if(time_greta == true) + { + os << "<td><strong>GRETA</strong></td>"; + } + if(time_safe_greta == true) + { + os << "<td><strong>GRETA<BR>(non-recursive mode)</strong></td>"; + } + +#endif + if(time_boost == true) + { + os << "<td><strong>Boost</strong></td>"; + } + if(time_localised_boost == true) + { + os << "<td><strong>Boost + C++ locale</strong></td>"; + } +#if defined(BOOST_HAS_POSIX) + if(time_posix == true) + { + os << "<td><strong>POSIX</strong></td>"; + } +#endif +#ifdef BOOST_HAS_PCRE + if(time_pcre == true) + { + os << "<td><strong>PCRE</strong></td>"; + } +#endif +#ifdef BOOST_HAS_XPRESSIVE + if(time_xpressive == true) + { + os << "<td><strong>Dynamic Xpressive</strong></td>"; + } +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + if(time_std == true) + { + os << "<td><strong>std::regex</strong></td>"; + } +#endif + os << "</tr>\n"; + + // + // Now enumerate through all averages: + // + os << "<tr>"; +#if defined(BOOST_HAS_GRETA) + if(time_greta == true) + os << "<td>" << (greta_total / greta_test_count) << "</td>\n"; + if(time_safe_greta == true) + os << "<td>" << (safe_greta_total / safe_greta_test_count) << "</td>\n"; +#endif +#if defined(BOOST_HAS_POSIX) + if(time_boost == true) + os << "<td>" << (boost_total / boost_test_count) << "</td>\n"; +#endif + if(time_boost == true) + os << "<td>" << (boost_total / boost_test_count) << "</td>\n"; + if(time_localised_boost == true) + os << "<td>" << (locale_boost_total / locale_boost_test_count) << "</td>\n"; + if(time_posix == true) + os << "<td>" << (posix_total / posix_test_count) << "</td>\n"; +#if defined(BOOST_HAS_PCRE) + if(time_pcre == true) + os << "<td>" << (pcre_total / pcre_test_count) << "</td>\n"; +#endif +#if defined(BOOST_HAS_XPRESSIVE) + if(time_xpressive == true) + os << "<td>" << (xpressive_total / xpressive_test_count) << "</td>\n"; +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + if(time_std == true) + os << "<td>" << (std_total / std_test_count) << "</td>\n"; +#endif + os << "</tr>\n"; + os << "</table>\n"; + return os.str(); +} + +void output_final_html() +{ + if(html_out_file.size()) + { + // + // start with search and replace ops: + // + std::string::size_type pos; + pos = html_contents.find("%compiler%"); + if(pos != std::string::npos) + { + html_contents.replace(pos, 10, BOOST_COMPILER); + } + pos = html_contents.find("%library%"); + if(pos != std::string::npos) + { + html_contents.replace(pos, 9, BOOST_STDLIB); + } + pos = html_contents.find("%os%"); + if(pos != std::string::npos) + { + html_contents.replace(pos, 4, BOOST_PLATFORM); + } + pos = html_contents.find("%boost%"); + if(pos != std::string::npos) + { + html_contents.replace(pos, 7, get_boost_version()); + } + pos = html_contents.find("%pcre%"); + if(pos != std::string::npos) + { +#ifdef PCRE_MINOR + html_contents.replace(pos, 6, BOOST_STRINGIZE(PCRE_MAJOR.PCRE_MINOR)); +#else + html_contents.replace(pos, 6, "N/A"); +#endif + } + pos = html_contents.find("%averages%"); + if(pos != std::string::npos) + { + html_contents.replace(pos, 10, get_averages_table()); + } + // + // now right the output to file: + // + std::ofstream os(html_out_file.c_str()); + os << html_contents; + } + else + { + std::cout << html_contents; + } +} diff --git a/libs/regex/performance/input.html b/libs/regex/performance/input.html new file mode 100644 index 0000000000..425dedebc1 --- /dev/null +++ b/libs/regex/performance/input.html @@ -0,0 +1,76 @@ +<html> + <head> + <title>Regular Expression Performance Comparison</title> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> + <meta name="Template" content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot"> + <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> + <!-- boostinspect:nounlinked --> + </head> + <body bgcolor="#ffffff" link="#0000ff" vlink="#800080"> + <h2>Regular Expression Performance Comparison</h2> + <p> + The following tables provide comparisons between the following regular + expression libraries:</p> + <p><a href="http://research.microsoft.com/projects/greta">GRETA</a>.</p> + <p><a href="http://www.boost.org/">The Boost regex library</a>.</p> + <p><a href="http://arglist.com/regex/">Henry Spencer's regular expression library</a> + - this is provided for comparison as a typical non-backtracking implementation.</p> + <P>Philip Hazel's <A href="http://www.pcre.org">PCRE</A> library.</P> + <H3>Details</H3> + <P>Machine: Intel Pentium 4 2.8GHz PC.</P> + <P>Compiler: %compiler%.</P> + <P>C++ Standard Library: %library%.</P> + <P>OS: %os%.</P> + <P>Boost version: %boost%.</P> + <P>PCRE version: %pcre%.</P> + <P> + As ever care should be taken in interpreting the results, only sensible regular + expressions (rather than pathological cases) are given, most are taken from the + Boost regex examples, or from the <a href="http://www.regxlib.com/">Library of + Regular Expressions</a>. In addition, some variation in the relative + performance of these libraries can be expected on other machines - as memory + access and processor caching effects can be quite large for most finite state + machine algorithms.</P> + <H3>Averages</H3> + <P>The following are the average relative scores for all the tests: the perfect + regular expression library would score 1, in practice anything less than 2 + is pretty good.</P> + <P>%averages%</P> + <h3>Comparison 1: Long Search</h3> + <p>For each of the following regular expressions the time taken to find all + occurrences of the expression within a long English language text was measured + (<a href="http://www.gutenberg.org/files/3200/old/mtent12.zip">mtent12.txt</a> + from <a href="http://promo.net/pg/">Project Gutenberg</a>, 19Mb). </p> + <P>%long_twain_search%</P> + <h3>Comparison 2: Medium Sized Search</h3> + <p>For each of the following regular expressions the time taken to find all + occurrences of the expression within a medium sized English language text was + measured (the first 50K from mtent12.txt - up to the end of Chapter 1). </p> + <P>%short_twain_search%</P> + <H3>Comparison 3: C++ Code Search</H3> + <P>For each of the following regular expressions the time taken to find all + occurrences of the expression within the C++ source file <A href="../../../boost/crc.hpp"> + boost/crc.hpp</A> was measured. </P> + <P>%code_search%</P> + <H3> + <H3>Comparison 4: HTML Document Search</H3> + </H3> + <P>For each of the following regular expressions the time taken to find all + occurrences of the expression within the html file <A href="../../libraries.htm">libs/libraries.htm</A> + was measured. </P> + <P>%html_search%</P> + <H3>Comparison 3: Simple Matches</H3> + <p> + For each of the following regular expressions the time taken to match against + the text indicated was measured. </p> + <P>%short_matches%</P> + <hr> + <p><i>© Copyright John Maddock 2003</i></p> + <p><i>Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> + or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> + + </body> +</html> + diff --git a/libs/regex/performance/main.cpp b/libs/regex/performance/main.cpp new file mode 100644 index 0000000000..3301fb59a0 --- /dev/null +++ b/libs/regex/performance/main.cpp @@ -0,0 +1,280 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include <iostream> +#include <fstream> +#include <iterator> +#include <cassert> +#include <boost/test/execution_monitor.hpp> +#include "regex_comparison.hpp" + + +void test_match(const std::string& re, const std::string& text, const std::string& description, bool icase) +{ + double time; + results r(re, description); + + std::cout << "Testing: \"" << re << "\" against \"" << description << "\"" << std::endl; + +#ifdef BOOST_HAS_GRETA + if(time_greta == true) + { + time = g::time_match(re, text, icase); + r.greta_time = time; + std::cout << "\tGRETA regex: " << time << "s\n"; + } + if(time_safe_greta == true) + { + time = gs::time_match(re, text, icase); + r.safe_greta_time = time; + std::cout << "\tSafe GRETA regex: " << time << "s\n"; + } +#endif + if(time_boost == true) + { + time = b::time_match(re, text, icase); + r.boost_time = time; + std::cout << "\tBoost regex: " << time << "s\n"; + } + if(time_localised_boost == true) + { + time = bl::time_match(re, text, icase); + r.localised_boost_time = time; + std::cout << "\tBoost regex (C++ locale): " << time << "s\n"; + } +#ifdef BOOST_HAS_POSIX + if(time_posix == true) + { + time = posix::time_match(re, text, icase); + r.posix_time = time; + std::cout << "\tPOSIX regex: " << time << "s\n"; + } +#endif +#ifdef BOOST_HAS_PCRE + if(time_pcre == true) + { + time = pcr::time_match(re, text, icase); + r.pcre_time = time; + std::cout << "\tPCRE regex: " << time << "s\n"; + } +#endif +#ifdef BOOST_HAS_XPRESSIVE + if(time_xpressive == true) + { + time = dxpr::time_match(re, text, icase); + r.xpressive_time = time; + std::cout << "\txpressive regex: " << time << "s\n"; + } +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + if(time_std == true) + { + time = stdr::time_match(re, text, icase); + r.std_time = time; + std::cout << "\tstd::regex: " << time << "s\n"; + } +#endif + r.finalise(); + result_list.push_back(r); +} + +void test_find_all(const std::string& re, const std::string& text, const std::string& description, bool icase) +{ + std::cout << "Testing: " << re << std::endl; + + double time; + results r(re, description); + +#ifdef BOOST_HAS_GRETA + if(time_greta == true) + { + time = g::time_find_all(re, text, icase); + r.greta_time = time; + std::cout << "\tGRETA regex: " << time << "s\n"; + } + if(time_safe_greta == true) + { + time = gs::time_find_all(re, text, icase); + r.safe_greta_time = time; + std::cout << "\tSafe GRETA regex: " << time << "s\n"; + } +#endif + if(time_boost == true) + { + time = b::time_find_all(re, text, icase); + r.boost_time = time; + std::cout << "\tBoost regex: " << time << "s\n"; + } + if(time_localised_boost == true) + { + time = bl::time_find_all(re, text, icase); + r.localised_boost_time = time; + std::cout << "\tBoost regex (C++ locale): " << time << "s\n"; + } +#ifdef BOOST_HAS_POSIX + if(time_posix == true) + { + time = posix::time_find_all(re, text, icase); + r.posix_time = time; + std::cout << "\tPOSIX regex: " << time << "s\n"; + } +#endif +#ifdef BOOST_HAS_PCRE + if(time_pcre == true) + { + time = pcr::time_find_all(re, text, icase); + r.pcre_time = time; + std::cout << "\tPCRE regex: " << time << "s\n"; + } +#endif +#ifdef BOOST_HAS_XPRESSIVE + if(time_xpressive == true) + { + time = dxpr::time_find_all(re, text, icase); + r.xpressive_time = time; + std::cout << "\txpressive regex: " << time << "s\n"; + } +#endif +#ifndef BOOST_NO_0X_HDR_REGEX + if(time_std == true) + { + time = stdr::time_find_all(re, text, icase); + r.std_time = time; + std::cout << "\tstd::regex: " << time << "s\n"; + } +#endif + r.finalise(); + result_list.push_back(r); +} + +int cpp_main(int argc, char * argv[]) +{ + // start by processing the command line args: + if(argc < 2) + return show_usage(); + int result = 0; + for(int c = 1; c < argc; ++c) + { + result += handle_argument(argv[c]); + } + if(result) + return result; + + if(test_matches) + { + // start with a simple test, this is basically a measure of the minimal overhead + // involved in calling a regex matcher: + test_match("abc", "abc"); + // these are from the regex docs: + test_match("^([0-9]+)(\\-| |$)(.*)$", "100- this is a line of ftp response which contains a message string"); + test_match("([[:digit:]]{4}[- ]){3}[[:digit:]]{3,4}", "1234-5678-1234-456"); + // these are from http://www.regxlib.com/ + test_match("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$", "john@johnmaddock.co.uk"); + test_match("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$", "foo12@foo.edu"); + test_match("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$", "bob.smith@foo.tv"); + test_match("^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$", "EH10 2QQ"); + test_match("^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$", "G1 1AA"); + test_match("^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$", "SW1 1ZZ"); + test_match("^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$", "4/1/2001"); + test_match("^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$", "12/12/2001"); + test_match("^[-+]?[[:digit:]]*\\.?[[:digit:]]*$", "123"); + test_match("^[-+]?[[:digit:]]*\\.?[[:digit:]]*$", "+3.14159"); + test_match("^[-+]?[[:digit:]]*\\.?[[:digit:]]*$", "-3.14159"); + } + output_html_results(true, "%short_matches%"); + + std::string file_contents; + + if(test_code) + { + load_file(file_contents, "../../../boost/crc.hpp"); + + const char* highlight_expression = // preprocessor directives: index 1 + "(^[ \t]*#(?:[^\\\\\\n]|\\\\[^\\n_[:punct:][:alnum:]]*[\\n[:punct:][:word:]])*)|" + // comment: index 2 + "(//[^\\n]*|/\\*.*?\\*/)|" + // literals: index 3 + "\\<([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\\>|" + // string literals: index 4 + "('(?:[^\\\\']|\\\\.)*'|\"(?:[^\\\\\"]|\\\\.)*\")|" + // keywords: index 5 + "\\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import" + "|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall" + "|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool" + "|break|case|catch|cdecl|char|class|const|const_cast|continue|default|delete" + "|do|double|dynamic_cast|else|enum|explicit|extern|false|float|for|friend|goto" + "|if|inline|int|long|mutable|namespace|new|operator|pascal|private|protected" + "|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_cast" + "|struct|switch|template|this|throw|true|try|typedef|typeid|typename|union|unsigned" + "|using|virtual|void|volatile|wchar_t|while)\\>" + ; + + const char* class_expression = "^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" + "(class|struct)[[:space:]]*(\\<\\w+\\>([ \t]*\\([^)]*\\))?" + "[[:space:]]*)*(\\<\\w*\\>)[[:space:]]*(<[^;:{]+>[[:space:]]*)?" + "(\\{|:[^;\\{()]*\\{)"; + + const char* include_expression = "^[ \t]*#[ \t]*include[ \t]+(\"[^\"]+\"|<[^>]+>)"; + const char* boost_include_expression = "^[ \t]*#[ \t]*include[ \t]+(\"boost/[^\"]+\"|<boost/[^>]+>)"; + + + test_find_all(class_expression, file_contents); + test_find_all(highlight_expression, file_contents); + test_find_all(include_expression, file_contents); + test_find_all(boost_include_expression, file_contents); + } + output_html_results(false, "%code_search%"); + + if(test_html) + { + load_file(file_contents, "../../../libs/libraries.htm"); + test_find_all("beman|john|dave", file_contents, true); + test_find_all("<p>.*?</p>", file_contents, true); + test_find_all("<a[^>]+href=(\"[^\"]*\"|[^[:space:]]+)[^>]*>", file_contents, true); + test_find_all("<h[12345678][^>]*>.*?</h[12345678]>", file_contents, true); + test_find_all("<img[^>]+src=(\"[^\"]*\"|[^[:space:]]+)[^>]*>", file_contents, true); + test_find_all("<font[^>]+face=(\"[^\"]*\"|[^[:space:]]+)[^>]*>.*?</font>", file_contents, true); + } + output_html_results(false, "%html_search%"); + + if(test_short_twain) + { + load_file(file_contents, "short_twain.txt"); + + test_find_all("Twain", file_contents); + test_find_all("Huck[[:alpha:]]+", file_contents); + test_find_all("[[:alpha:]]+ing", file_contents); + test_find_all("^[^\n]*?Twain", file_contents); + test_find_all("Tom|Sawyer|Huckleberry|Finn", file_contents); + test_find_all("(Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)", file_contents); + } + output_html_results(false, "%short_twain_search%"); + + if(test_long_twain) + { + load_file(file_contents, "mtent13.txt"); + + test_find_all("Twain", file_contents); + test_find_all("Huck[[:alpha:]]+", file_contents); + test_find_all("[[:alpha:]]+ing", file_contents); + test_find_all("^[^\n]*?Twain", file_contents); + test_find_all("Tom|Sawyer|Huckleberry|Finn", file_contents); + time_posix = false; + test_find_all("(Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)", file_contents); + time_posix = true; + } + output_html_results(false, "%long_twain_search%"); + + output_final_html(); + return 0; +} + + diff --git a/libs/regex/performance/regex_comparison.hpp b/libs/regex/performance/regex_comparison.hpp new file mode 100644 index 0000000000..4ed968fd83 --- /dev/null +++ b/libs/regex/performance/regex_comparison.hpp @@ -0,0 +1,158 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + +#ifndef REGEX_COMPARISON_HPP +#define REGEX_COMPARISON_HPP + +#include <string> +#include <list> +#include <boost/limits.hpp> + +// +// globals: +// +extern bool time_boost; +extern bool time_localised_boost; +extern bool time_greta; +extern bool time_safe_greta; +extern bool time_posix; +extern bool time_pcre; +extern bool time_xpressive; +extern bool time_std; + +extern bool test_matches; +extern bool test_short_twain; +extern bool test_long_twain; +extern bool test_code; +extern bool test_html; + +extern std::string html_template_file; +extern std::string html_out_file; +extern std::string html_contents; + + +int handle_argument(const std::string& what); +int show_usage(); +void load_file(std::string& text, const char* file); +void output_html_results(bool show_description, const std::string& tagname); +void output_final_html(); + + +struct results +{ + double boost_time; + double localised_boost_time; + double greta_time; + double safe_greta_time; + double posix_time; + double pcre_time; + double xpressive_time; + double std_time; + double factor; + std::string expression; + std::string description; + results(const std::string& ex, const std::string& desc) + : boost_time(-1), + localised_boost_time(-1), + greta_time(-1), + safe_greta_time(-1), + posix_time(-1), + pcre_time(-1), + xpressive_time(-1), + std_time(-1), + factor((std::numeric_limits<double>::max)()), + expression(ex), + description(desc) + {} + void finalise() + { + if((boost_time >= 0) && (boost_time < factor)) + factor = boost_time; + if((localised_boost_time >= 0) && (localised_boost_time < factor)) + factor = localised_boost_time; + if((greta_time >= 0) && (greta_time < factor)) + factor = greta_time; + if((safe_greta_time >= 0) && (safe_greta_time < factor)) + factor = safe_greta_time; + if((posix_time >= 0) && (posix_time < factor)) + factor = posix_time; + if((pcre_time >= 0) && (pcre_time < factor)) + factor = pcre_time; + if((xpressive_time >= 0) && (xpressive_time < factor)) + factor = xpressive_time; + if((std_time >= 0) && (std_time < factor)) + factor = std_time; + } +}; + +extern std::list<results> result_list; + + +namespace b { +// boost tests: +double time_match(const std::string& re, const std::string& text, bool icase); +double time_find_all(const std::string& re, const std::string& text, bool icase); + +} +namespace bl { +// localised boost tests: +double time_match(const std::string& re, const std::string& text, bool icase); +double time_find_all(const std::string& re, const std::string& text, bool icase); + +} +namespace pcr { +// pcre tests: +double time_match(const std::string& re, const std::string& text, bool icase); +double time_find_all(const std::string& re, const std::string& text, bool icase); + +} +namespace g { +// greta tests: +double time_match(const std::string& re, const std::string& text, bool icase); +double time_find_all(const std::string& re, const std::string& text, bool icase); + +} +namespace gs { +// safe greta tests: +double time_match(const std::string& re, const std::string& text, bool icase); +double time_find_all(const std::string& re, const std::string& text, bool icase); + +} +namespace posix { +// safe greta tests: +double time_match(const std::string& re, const std::string& text, bool icase); +double time_find_all(const std::string& re, const std::string& text, bool icase); + +} +namespace dxpr { +// xpressive tests: +double time_match(const std::string& re, const std::string& text, bool icase); +double time_find_all(const std::string& re, const std::string& text, bool icase); +} +namespace stdr { +// xpressive tests: +double time_match(const std::string& re, const std::string& text, bool icase); +double time_find_all(const std::string& re, const std::string& text, bool icase); +} + +void test_match(const std::string& re, const std::string& text, const std::string& description, bool icase = false); +void test_find_all(const std::string& re, const std::string& text, const std::string& description, bool icase = false); +inline void test_match(const std::string& re, const std::string& text, bool icase = false) +{ test_match(re, text, text, icase); } +inline void test_find_all(const std::string& re, const std::string& text, bool icase = false) +{ test_find_all(re, text, "", icase); } + + +#define REPEAT_COUNT 10 + +#endif + diff --git a/libs/regex/performance/time_boost.cpp b/libs/regex/performance/time_boost.cpp new file mode 100644 index 0000000000..8d145396ff --- /dev/null +++ b/libs/regex/performance/time_boost.cpp @@ -0,0 +1,119 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "regex_comparison.hpp" +#include <iostream> +#include <boost/timer.hpp> +#include <boost/regex.hpp> + +namespace b{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + try{ + boost::regex e(re, (icase ? boost::regex::perl | boost::regex::icase : boost::regex::perl)); + boost::smatch what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::regex_match(text, what, e); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::regex_match(text, what, e); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; + } + catch(const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + return -1; + } +} + +bool dummy_grep_proc(const boost::smatch&) +{ return true; } + +struct noop +{ + void operator()( boost::smatch const & ) const + { + } +}; + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + try{ + boost::regex e(re, (icase ? boost::regex::perl | boost::regex::icase : boost::regex::perl)); + boost::smatch what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::sregex_iterator begin( text.begin(), text.end(), e ), end; + std::for_each( begin, end, noop() ); + //boost::regex_grep(&dummy_grep_proc, text, e); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + if(result >10) + return result / iter; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::regex_grep(&dummy_grep_proc, text, e); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; + } + catch(const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + return -1; + } +} + +} + diff --git a/libs/regex/performance/time_dynamic_xpressive.cpp b/libs/regex/performance/time_dynamic_xpressive.cpp new file mode 100644 index 0000000000..6fc7137c95 --- /dev/null +++ b/libs/regex/performance/time_dynamic_xpressive.cpp @@ -0,0 +1,144 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "regex_comparison.hpp" + +#ifdef BOOST_HAS_XPRESSIVE +#include <cassert> +#include <iostream> +#include <boost/timer.hpp> +#include <boost/xpressive/xpressive.hpp> + +namespace dxpr +{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + try{ + boost::xpressive::regex_constants::syntax_option_type flags = boost::xpressive::regex_constants::optimize; + if(icase) + flags = flags | boost::xpressive::regex_constants::icase; + boost::xpressive::sregex e(boost::xpressive::sregex::compile(re, flags)); + boost::xpressive::smatch what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + assert(boost::xpressive::regex_match( text, what, e )); + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::xpressive::regex_match( text, what, e ); + } + result = tim.elapsed(); + iter *= 2; + } while(result < 0.5); + iter /= 2; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::xpressive::regex_match( text, what, e ); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; + } + catch(const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + return -1; + } +} + +struct noop +{ + void operator()( boost::xpressive::smatch const & ) const + { + } +}; + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + try{ + boost::xpressive::regex_constants::syntax_option_type flags = boost::xpressive::regex_constants::optimize; + if(icase) + flags = flags | boost::xpressive::regex_constants::icase; + boost::xpressive::sregex e(boost::xpressive::sregex::compile(re, flags)); + boost::xpressive::smatch what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::xpressive::sregex_iterator begin( text.begin(), text.end(), e ), end; + std::for_each( begin, end, noop() ); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + if(result >10) + return result / iter; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::xpressive::sregex_iterator begin( text.begin(), text.end(), e ), end; + std::for_each( begin, end, noop() ); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; + } + catch(const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + return -1; + } +} + +} + +#else + +namespace dxpr{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} + +} +#endif + + diff --git a/libs/regex/performance/time_greta.cpp b/libs/regex/performance/time_greta.cpp new file mode 100644 index 0000000000..22b1d9f6d0 --- /dev/null +++ b/libs/regex/performance/time_greta.cpp @@ -0,0 +1,122 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "regex_comparison.hpp" +#if defined(BOOST_HAS_GRETA) +#include <cassert> +#include <boost/timer.hpp> +#include "regexpr2.h" + +namespace g{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + regex::rpattern e(re, (icase ? regex::MULTILINE | regex::NORMALIZE | regex::NOCASE : regex::MULTILINE | regex::NORMALIZE)); + regex::match_results what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + assert(e.match(text, what)); + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + e.match(text, what); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + e.match(text, what); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; +} + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + regex::rpattern e(re, (icase ? regex::MULTILINE | regex::NORMALIZE | regex::NOCASE : regex::MULTILINE | regex::NORMALIZE)); + regex::match_results what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + e.match(text.begin(), text.end(), what); + while(what.backref(0).matched) + { + e.match(what.backref(0).end(), text.end(), what); + } + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + if(result > 10) + return result / iter; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + e.match(text.begin(), text.end(), what); + while(what.backref(0).matched) + { + e.match(what.backref(0).end(), text.end(), what); + } + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; +} + +} + +#else + +namespace g { + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} + +} + +#endif + + diff --git a/libs/regex/performance/time_localised_boost.cpp b/libs/regex/performance/time_localised_boost.cpp new file mode 100644 index 0000000000..d2a27bf496 --- /dev/null +++ b/libs/regex/performance/time_localised_boost.cpp @@ -0,0 +1,107 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "regex_comparison.hpp" +#include <boost/timer.hpp> +#include <boost/regex.hpp> + +namespace bl{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + boost::basic_regex<char, boost::cpp_regex_traits<char> > e(re, (icase ? boost::regex::perl | boost::regex::icase : boost::regex::perl)); + boost::smatch what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::regex_match(text, what, e); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::regex_match(text, what, e); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; +} + +bool dummy_grep_proc(const boost::smatch&) +{ return true; } + +struct noop +{ + void operator()( boost::smatch const & ) const + { + } +}; + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + boost::basic_regex<char, boost::cpp_regex_traits<char> > e(re, (icase ? boost::regex::perl | boost::regex::icase : boost::regex::perl)); + boost::smatch what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::regex_iterator< + std::string::const_iterator, + char, + boost::cpp_regex_traits<char> > begin( text.begin(), text.end(), e ), end; + std::for_each( begin, end, noop() ); + //boost::regex_grep(&dummy_grep_proc, text, e); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + if(result >10) + return result / iter; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + boost::regex_grep(&dummy_grep_proc, text, e); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; +} + +} + diff --git a/libs/regex/performance/time_pcre.cpp b/libs/regex/performance/time_pcre.cpp new file mode 100644 index 0000000000..47d6ce8cb6 --- /dev/null +++ b/libs/regex/performance/time_pcre.cpp @@ -0,0 +1,176 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include <cassert> +#include <cfloat> +#include "regex_comparison.hpp" +#ifdef BOOST_HAS_PCRE +#include "pcre.h" +#include <boost/timer.hpp> + +namespace pcr{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + pcre *ppcre; + const char *error; + int erroffset; + + int what[50]; + + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + + if(0 == (ppcre = pcre_compile(re.c_str(), (icase ? PCRE_CASELESS | PCRE_ANCHORED | PCRE_DOTALL | PCRE_MULTILINE : PCRE_ANCHORED | PCRE_DOTALL | PCRE_MULTILINE), + &error, &erroffset, NULL))) + { + free(ppcre); + return -1; + } + + pcre_extra *pe; + pe = pcre_study(ppcre, 0, &error); + if(error) + { + free(ppcre); + free(pe); + return -1; + } + + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + erroffset = pcre_exec(ppcre, pe, text.c_str(), text.size(), 0, 0, what, sizeof(what)/sizeof(int)); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + erroffset = pcre_exec(ppcre, pe, text.c_str(), text.size(), 0, 0, what, sizeof(what)/sizeof(int)); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + free(ppcre); + free(pe); + return result / iter; +} + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + pcre *ppcre; + const char *error; + int erroffset; + + int what[50]; + + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + int exec_result; + int matches; + + if(0 == (ppcre = pcre_compile(re.c_str(), (icase ? PCRE_CASELESS | PCRE_DOTALL | PCRE_MULTILINE : PCRE_DOTALL | PCRE_MULTILINE), &error, &erroffset, NULL))) + { + free(ppcre); + return -1; + } + + pcre_extra *pe; + pe = pcre_study(ppcre, 0, &error); + if(error) + { + free(ppcre); + free(pe); + return -1; + } + + do + { + int startoff; + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + matches = 0; + startoff = 0; + exec_result = pcre_exec(ppcre, pe, text.c_str(), text.size(), startoff, 0, what, sizeof(what)/sizeof(int)); + while(exec_result >= 0) + { + ++matches; + startoff = what[1]; + exec_result = pcre_exec(ppcre, pe, text.c_str(), text.size(), startoff, 0, what, sizeof(what)/sizeof(int)); + } + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + if(result >10) + return result / iter; + + result = DBL_MAX; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + int startoff; + matches = 0; + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + matches = 0; + startoff = 0; + exec_result = pcre_exec(ppcre, pe, text.c_str(), text.size(), startoff, 0, what, sizeof(what)/sizeof(int)); + while(exec_result >= 0) + { + ++matches; + startoff = what[1]; + exec_result = pcre_exec(ppcre, pe, text.c_str(), text.size(), startoff, 0, what, sizeof(what)/sizeof(int)); + } + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; +} + +} +#else + +namespace pcr{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} + +} + +#endif diff --git a/libs/regex/performance/time_posix.cpp b/libs/regex/performance/time_posix.cpp new file mode 100644 index 0000000000..f5192187c7 --- /dev/null +++ b/libs/regex/performance/time_posix.cpp @@ -0,0 +1,139 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include <cassert> +#include <cfloat> +#include "regex_comparison.hpp" +#ifdef BOOST_HAS_POSIX +#include <boost/timer.hpp> +#include "regex.h" + +namespace posix{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + regex_t e; + regmatch_t what[20]; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + if(0 != ::regcomp(&e, re.c_str(), (icase ? REG_ICASE | REG_EXTENDED : REG_EXTENDED))) + return -1; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + regexec(&e, text.c_str(), e.re_nsub, what, 0); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + regexec(&e, text.c_str(), e.re_nsub, what, 0); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + regfree(&e); + return result / iter; +} + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + regex_t e; + regmatch_t what[20]; + memset(what, 0, sizeof(what)); + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + int exec_result; + int matches; + if(0 != regcomp(&e, re.c_str(), (icase ? REG_ICASE | REG_EXTENDED : REG_EXTENDED))) + return -1; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + what[0].rm_so = 0; + what[0].rm_eo = text.size(); + matches = 0; + exec_result = regexec(&e, text.c_str(), 20, what, REG_STARTEND); + while(exec_result == 0) + { + ++matches; + what[0].rm_so = what[0].rm_eo; + what[0].rm_eo = text.size(); + exec_result = regexec(&e, text.c_str(), 20, what, REG_STARTEND); + } + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + if(result >10) + return result / iter; + + result = DBL_MAX; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + what[0].rm_so = 0; + what[0].rm_eo = text.size(); + matches = 0; + exec_result = regexec(&e, text.c_str(), 20, what, REG_STARTEND); + while(exec_result == 0) + { + ++matches; + what[0].rm_so = what[0].rm_eo; + what[0].rm_eo = text.size(); + exec_result = regexec(&e, text.c_str(), 20, what, REG_STARTEND); + } + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; +} + +} +#else + +namespace posix{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} + +} +#endif diff --git a/libs/regex/performance/time_safe_greta.cpp b/libs/regex/performance/time_safe_greta.cpp new file mode 100644 index 0000000000..c68cfb3429 --- /dev/null +++ b/libs/regex/performance/time_safe_greta.cpp @@ -0,0 +1,124 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "regex_comparison.hpp" +#if defined(BOOST_HAS_GRETA) + +#include <cassert> +#include <boost/timer.hpp> +#include "regexpr2.h" + +namespace gs{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + regex::rpattern e(re, (icase ? regex::MULTILINE | regex::NORMALIZE | regex::NOCASE : regex::MULTILINE | regex::NORMALIZE), regex::MODE_SAFE); + regex::match_results what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + assert(e.match(text, what)); + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + e.match(text, what); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + e.match(text, what); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; +} + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + regex::rpattern e(re, (icase ? regex::MULTILINE | regex::NORMALIZE | regex::NOCASE : regex::MULTILINE | regex::NORMALIZE), regex::MODE_SAFE); + regex::match_results what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + bool r; + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + e.match(text.begin(), text.end(), what); + while(what.backref(0).matched) + { + e.match(what.backref(0).end(), text.end(), what); + } + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + if(result > 10) + return result / iter; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + e.match(text.begin(), text.end(), what); + while(what.backref(0).matched) + { + e.match(what.backref(0).end(), text.end(), what); + } + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; +} + +} + +#else + +namespace gs{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + return -1; +} + +} + +#endif + + diff --git a/libs/regex/performance/time_std.cpp b/libs/regex/performance/time_std.cpp new file mode 100644 index 0000000000..46fa212b33 --- /dev/null +++ b/libs/regex/performance/time_std.cpp @@ -0,0 +1,123 @@ +/* + * + * Copyright (c) 2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "regex_comparison.hpp" +#ifndef BOOST_NO_0X_HDR_REGEX +#include <iostream> +#include <boost/timer.hpp> +#include <regex> + +namespace stdr{ + +double time_match(const std::string& re, const std::string& text, bool icase) +{ + try{ + std::regex e(re, (icase ? std::regex::ECMAScript | std::regex::icase : std::regex::ECMAScript)); + std::smatch what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + std::regex_match(text, what, e); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + std::regex_match(text, what, e); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; + } + catch(const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + return -1; + } +} + +bool dummy_grep_proc(const std::smatch&) +{ return true; } + +struct noop +{ + void operator()( std::smatch const & ) const + { + } +}; + +double time_find_all(const std::string& re, const std::string& text, bool icase) +{ + try{ + std::regex e(re, (icase ? std::regex::ECMAScript | std::regex::icase : std::regex::ECMAScript)); + std::smatch what; + boost::timer tim; + int iter = 1; + int counter, repeats; + double result = 0; + double run; + do + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + std::sregex_iterator begin( text.begin(), text.end(), e ), end; + std::for_each( begin, end, noop() ); + //std::regex_grep(&dummy_grep_proc, text, e); + } + result = tim.elapsed(); + iter *= 2; + }while(result < 0.5); + iter /= 2; + + if(result >10) + return result / iter; + + // repeat test and report least value for consistency: + for(repeats = 0; repeats < REPEAT_COUNT; ++repeats) + { + tim.restart(); + for(counter = 0; counter < iter; ++counter) + { + std::sregex_iterator begin( text.begin(), text.end(), e ), end; + std::for_each( begin, end, noop() ); + //std::regex_grep(&dummy_grep_proc, text, e); + } + run = tim.elapsed(); + result = (std::min)(run, result); + } + return result / iter; + } + catch(const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + return -1; + } +} + +} + +#endif diff --git a/libs/regex/readme.txt b/libs/regex/readme.txt new file mode 100644 index 0000000000..f028bd33d5 --- /dev/null +++ b/libs/regex/readme.txt @@ -0,0 +1,21 @@ +Copyright (c) 1998-2003 +John Maddock + + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +************************************************************************ + +Full instructions for use of this library can be accessed from +libs/regex/docs/index.html + +Installation instructions and library overview is are in +libs/regex/docs/introduction.html + +This library is part of boost (see www.boost.org), the latest version +of the library is available from the boost web site, or development +snapshots from the boost cvs repository at +http://sourceforge.net/project/?group_id=7586 + + diff --git a/libs/regex/src/c_regex_traits.cpp b/libs/regex/src/c_regex_traits.cpp new file mode 100644 index 0000000000..6701020105 --- /dev/null +++ b/libs/regex/src/c_regex_traits.cpp @@ -0,0 +1,193 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: c_regex_traits.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Implements out of line c_regex_traits<char> members + */ + + +#define BOOST_REGEX_SOURCE + +#include <boost/config.hpp> +#include <boost/detail/workaround.hpp> +#include "internals.hpp" + +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) + +#include <boost/regex/v4/c_regex_traits.hpp> +#include <boost/regex/v4/primary_transform.hpp> +#include <boost/regex/v4/regex_traits_defaults.hpp> + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::strxfrm; using ::isspace; + using ::ispunct; using ::isalpha; + using ::isalnum; using ::iscntrl; + using ::isprint; using ::isupper; + using ::islower; using ::isdigit; + using ::isxdigit; using ::strtol; +} +#endif + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost{ + +c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transform(const char* p1, const char* p2) +{ + std::string result(10, ' '); + std::size_t s = result.size(); + std::size_t r; + std::string src(p1, p2); + while(s < (r = std::strxfrm(&*result.begin(), src.c_str(), s))) + { + result.append(r - s + 3, ' '); + s = result.size(); + } + result.erase(r); + return result; +} + +c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transform_primary(const char* p1, const char* p2) +{ + static char s_delim; + static const int s_collate_type = ::boost::re_detail::find_sort_syntax(static_cast<c_regex_traits<char>*>(0), &s_delim); + std::string result; + // + // What we do here depends upon the format of the sort key returned by + // sort key returned by this->transform: + // + switch(s_collate_type) + { + case ::boost::re_detail::sort_C: + case ::boost::re_detail::sort_unknown: + // the best we can do is translate to lower case, then get a regular sort key: + { + result.assign(p1, p2); + for(std::string::size_type i = 0; i < result.size(); ++i) + result[i] = static_cast<char>((std::tolower)(static_cast<unsigned char>(result[i]))); + result = transform(&*result.begin(), &*result.begin() + result.size()); + break; + } + case ::boost::re_detail::sort_fixed: + { + // get a regular sort key, and then truncate it: + result = transform(p1, p2); + result.erase(s_delim); + break; + } + case ::boost::re_detail::sort_delim: + // get a regular sort key, and then truncate everything after the delim: + result = transform(p1, p2); + if(result.size() && (result[0] == s_delim)) + break; + std::size_t i; + for(i = 0; i < result.size(); ++i) + { + if(result[i] == s_delim) + break; + } + result.erase(i); + break; + } + if(result.empty()) + result = std::string(1, char(0)); + return result; +} + +c_regex_traits<char>::char_class_type BOOST_REGEX_CALL c_regex_traits<char>::lookup_classname(const char* p1, const char* p2) +{ + static const char_class_type masks[] = + { + 0, + char_class_alnum, + char_class_alpha, + char_class_blank, + char_class_cntrl, + char_class_digit, + char_class_digit, + char_class_graph, + char_class_horizontal, + char_class_lower, + char_class_lower, + char_class_print, + char_class_punct, + char_class_space, + char_class_space, + char_class_upper, + char_class_unicode, + char_class_upper, + char_class_vertical, + char_class_alnum | char_class_word, + char_class_alnum | char_class_word, + char_class_xdigit, + }; + + int idx = ::boost::re_detail::get_default_class_id(p1, p2); + if(idx < 0) + { + std::string s(p1, p2); + for(std::string::size_type i = 0; i < s.size(); ++i) + s[i] = static_cast<char>((std::tolower)(static_cast<unsigned char>(s[i]))); + idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size()); + } + BOOST_ASSERT(std::size_t(idx+1) < sizeof(masks) / sizeof(masks[0])); + return masks[idx+1]; +} + +bool BOOST_REGEX_CALL c_regex_traits<char>::isctype(char c, char_class_type mask) +{ + return + ((mask & char_class_space) && (std::isspace)(static_cast<unsigned char>(c))) + || ((mask & char_class_print) && (std::isprint)(static_cast<unsigned char>(c))) + || ((mask & char_class_cntrl) && (std::iscntrl)(static_cast<unsigned char>(c))) + || ((mask & char_class_upper) && (std::isupper)(static_cast<unsigned char>(c))) + || ((mask & char_class_lower) && (std::islower)(static_cast<unsigned char>(c))) + || ((mask & char_class_alpha) && (std::isalpha)(static_cast<unsigned char>(c))) + || ((mask & char_class_digit) && (std::isdigit)(static_cast<unsigned char>(c))) + || ((mask & char_class_punct) && (std::ispunct)(static_cast<unsigned char>(c))) + || ((mask & char_class_xdigit) && (std::isxdigit)(static_cast<unsigned char>(c))) + || ((mask & char_class_blank) && (std::isspace)(static_cast<unsigned char>(c)) && !::boost::re_detail::is_separator(c)) + || ((mask & char_class_word) && (c == '_')) + || ((mask & char_class_vertical) && (::boost::re_detail::is_separator(c) || (c == '\v'))) + || ((mask & char_class_horizontal) && (std::isspace)(static_cast<unsigned char>(c)) && !::boost::re_detail::is_separator(c) && (c != '\v')); +} + +c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::lookup_collatename(const char* p1, const char* p2) +{ + std::string s(p1, p2); + s = ::boost::re_detail::lookup_default_collate_name(s); + if(s.empty() && (p2-p1 == 1)) + s.append(1, *p1); + return s; +} + +int BOOST_REGEX_CALL c_regex_traits<char>::value(char c, int radix) +{ + char b[2] = { c, '\0', }; + char* ep; + int result = std::strtol(b, &ep, radix); + if(ep == b) + return -1; + return result; +} + +} +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif diff --git a/libs/regex/src/cpp_regex_traits.cpp b/libs/regex/src/cpp_regex_traits.cpp new file mode 100644 index 0000000000..1d24cc1a5f --- /dev/null +++ b/libs/regex/src/cpp_regex_traits.cpp @@ -0,0 +1,117 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE cpp_regex_traits.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Implements cpp_regex_traits<char> (and associated helper classes). + */ + +#define BOOST_REGEX_SOURCE +#include <boost/config.hpp> +#ifndef BOOST_NO_STD_LOCALE +#include <boost/regex/regex_traits.hpp> +#include <boost/regex/pattern_except.hpp> + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::memset; +} +#endif + +namespace boost{ namespace re_detail{ + +void cpp_regex_traits_char_layer<char>::init() +{ + // we need to start by initialising our syntax map so we know which + // character is used for which purpose: + std::memset(m_char_map, 0, sizeof(m_char_map)); +#ifndef BOOST_NO_STD_MESSAGES +#ifndef __IBMCPP__ + std::messages<char>::catalog cat = static_cast<std::messages<char>::catalog>(-1); +#else + std::messages<char>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1); +#endif + std::string cat_name(cpp_regex_traits<char>::get_catalog_name()); + if(cat_name.size() && (m_pmessages != 0)) + { + cat = this->m_pmessages->open( + cat_name, + this->m_locale); + if((int)cat < 0) + { + std::string m("Unable to open message catalog: "); + std::runtime_error err(m + cat_name); + boost::re_detail::raise_runtime_error(err); + } + } + // + // if we have a valid catalog then load our messages: + // + if((int)cat >= 0) + { +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) + { + string_type mss = this->m_pmessages->get(cat, 0, i, get_default_syntax(i)); + for(string_type::size_type j = 0; j < mss.size(); ++j) + { + m_char_map[static_cast<unsigned char>(mss[j])] = i; + } + } + this->m_pmessages->close(cat); +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + this->m_pmessages->close(cat); + throw; + } +#endif + } + else + { +#endif + for(regex_constants::syntax_type j = 1; j < regex_constants::syntax_max; ++j) + { + const char* ptr = get_default_syntax(j); + while(ptr && *ptr) + { + m_char_map[static_cast<unsigned char>(*ptr)] = j; + ++ptr; + } + } +#ifndef BOOST_NO_STD_MESSAGES + } +#endif + // + // finish off by calculating our escape types: + // + unsigned char i = 'A'; + do + { + if(m_char_map[i] == 0) + { + if(this->m_pctype->is(std::ctype_base::lower, i)) + m_char_map[i] = regex_constants::escape_type_class; + else if(this->m_pctype->is(std::ctype_base::upper, i)) + m_char_map[i] = regex_constants::escape_type_not_class; + } + }while(0xFF != i++); +} + +} // re_detail +} // boost +#endif + diff --git a/libs/regex/src/cregex.cpp b/libs/regex/src/cregex.cpp new file mode 100644 index 0000000000..8d69139f96 --- /dev/null +++ b/libs/regex/src/cregex.cpp @@ -0,0 +1,660 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: cregex.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Implements high level class boost::RexEx + */ + + +#define BOOST_REGEX_SOURCE + +#include <boost/regex.hpp> +#include <boost/cregex.hpp> +#if !defined(BOOST_NO_STD_STRING) +#include <map> +#include <list> +#include <boost/regex/v4/fileiter.hpp> +typedef boost::match_flag_type match_flag_type; +#include <cstdio> + +#ifdef BOOST_MSVC +#pragma warning(disable:4309) +#endif +#ifdef BOOST_INTEL +#pragma warning(disable:981 383) +#endif + +namespace boost{ + +#ifdef __BORLANDC__ +#if __BORLANDC__ < 0x530 +// +// we need to instantiate the vector classes we use +// since declaring a reference to type doesn't seem to +// do the job... +std::vector<std::size_t> inst1; +std::vector<std::string> inst2; +#endif +#endif + +namespace{ + +template <class iterator> +std::string to_string(iterator i, iterator j) +{ + std::string s; + while(i != j) + { + s.append(1, *i); + ++i; + } + return s; +} + +inline std::string to_string(const char* i, const char* j) +{ + return std::string(i, j); +} + +} +namespace re_detail{ + +class RegExData +{ +public: + enum type + { + type_pc, + type_pf, + type_copy + }; + regex e; + cmatch m; +#ifndef BOOST_REGEX_NO_FILEITER + match_results<mapfile::iterator> fm; +#endif + type t; + const char* pbase; +#ifndef BOOST_REGEX_NO_FILEITER + mapfile::iterator fbase; +#endif + std::map<int, std::string, std::less<int> > strings; + std::map<int, std::ptrdiff_t, std::less<int> > positions; + void update(); + void clean(); + RegExData() : e(), m(), +#ifndef BOOST_REGEX_NO_FILEITER + fm(), +#endif + t(type_copy), pbase(0), +#ifndef BOOST_REGEX_NO_FILEITER + fbase(), +#endif + strings(), positions() {} +}; + +void RegExData::update() +{ + strings.erase(strings.begin(), strings.end()); + positions.erase(positions.begin(), positions.end()); + if(t == type_pc) + { + for(unsigned int i = 0; i < m.size(); ++i) + { + if(m[i].matched) strings[i] = std::string(m[i].first, m[i].second); + positions[i] = m[i].matched ? m[i].first - pbase : -1; + } + } +#ifndef BOOST_REGEX_NO_FILEITER + else + { + for(unsigned int i = 0; i < fm.size(); ++i) + { + if(fm[i].matched) strings[i] = to_string(fm[i].first, fm[i].second); + positions[i] = fm[i].matched ? fm[i].first - fbase : -1; + } + } +#endif + t = type_copy; +} + +void RegExData::clean() +{ +#ifndef BOOST_REGEX_NO_FILEITER + fbase = mapfile::iterator(); + fm = match_results<mapfile::iterator>(); +#endif +} + +} // namespace + +RegEx::RegEx() +{ + pdata = new re_detail::RegExData(); +} + +RegEx::RegEx(const RegEx& o) +{ + pdata = new re_detail::RegExData(*(o.pdata)); +} + +RegEx::~RegEx() +{ + delete pdata; +} + +RegEx::RegEx(const char* c, bool icase) +{ + pdata = new re_detail::RegExData(); + SetExpression(c, icase); +} + +RegEx::RegEx(const std::string& s, bool icase) +{ + pdata = new re_detail::RegExData(); + SetExpression(s.c_str(), icase); +} + +RegEx& RegEx::operator=(const RegEx& o) +{ + *pdata = *(o.pdata); + return *this; +} + +RegEx& RegEx::operator=(const char* p) +{ + SetExpression(p, false); + return *this; +} + +unsigned int RegEx::SetExpression(const char* p, bool icase) +{ + boost::uint_fast32_t f = icase ? regex::normal | regex::icase : regex::normal; + return pdata->e.set_expression(p, f); +} + +unsigned int RegEx::error_code()const +{ + return pdata->e.error_code(); +} + + +std::string RegEx::Expression()const +{ + return pdata->e.expression(); +} + +// +// now matching operators: +// +bool RegEx::Match(const char* p, match_flag_type flags) +{ + pdata->t = re_detail::RegExData::type_pc; + pdata->pbase = p; + const char* end = p; + while(*end)++end; + + if(regex_match(p, end, pdata->m, pdata->e, flags)) + { + pdata->update(); + return true; + } + return false; +} + +bool RegEx::Search(const char* p, match_flag_type flags) +{ + pdata->t = re_detail::RegExData::type_pc; + pdata->pbase = p; + const char* end = p; + while(*end)++end; + + if(regex_search(p, end, pdata->m, pdata->e, flags)) + { + pdata->update(); + return true; + } + return false; +} +namespace re_detail{ +struct pred1 +{ + GrepCallback cb; + RegEx* pe; + pred1(GrepCallback c, RegEx* i) : cb(c), pe(i) {} + bool operator()(const cmatch& m) + { + pe->pdata->m = m; + return cb(*pe); + } +}; +} +unsigned int RegEx::Grep(GrepCallback cb, const char* p, match_flag_type flags) +{ + pdata->t = re_detail::RegExData::type_pc; + pdata->pbase = p; + const char* end = p; + while(*end)++end; + + unsigned int result = regex_grep(re_detail::pred1(cb, this), p, end, pdata->e, flags); + if(result) + pdata->update(); + return result; +} +namespace re_detail{ +struct pred2 +{ + std::vector<std::string>& v; + RegEx* pe; + pred2(std::vector<std::string>& o, RegEx* e) : v(o), pe(e) {} + bool operator()(const cmatch& m) + { + pe->pdata->m = m; + v.push_back(std::string(m[0].first, m[0].second)); + return true; + } +private: + pred2& operator=(const pred2&); +}; +} + +unsigned int RegEx::Grep(std::vector<std::string>& v, const char* p, match_flag_type flags) +{ + pdata->t = re_detail::RegExData::type_pc; + pdata->pbase = p; + const char* end = p; + while(*end)++end; + + unsigned int result = regex_grep(re_detail::pred2(v, this), p, end, pdata->e, flags); + if(result) + pdata->update(); + return result; +} +namespace re_detail{ +struct pred3 +{ + std::vector<std::size_t>& v; + const char* base; + RegEx* pe; + pred3(std::vector<std::size_t>& o, const char* pb, RegEx* p) : v(o), base(pb), pe(p) {} + bool operator()(const cmatch& m) + { + pe->pdata->m = m; + v.push_back(static_cast<std::size_t>(m[0].first - base)); + return true; + } +private: + pred3& operator=(const pred3&); +}; +} +unsigned int RegEx::Grep(std::vector<std::size_t>& v, const char* p, match_flag_type flags) +{ + pdata->t = re_detail::RegExData::type_pc; + pdata->pbase = p; + const char* end = p; + while(*end)++end; + + unsigned int result = regex_grep(re_detail::pred3(v, p, this), p, end, pdata->e, flags); + if(result) + pdata->update(); + return result; +} +#ifndef BOOST_REGEX_NO_FILEITER +namespace re_detail{ +struct pred4 +{ + GrepFileCallback cb; + RegEx* pe; + const char* file; + bool ok; + pred4(GrepFileCallback c, RegEx* i, const char* f) : cb(c), pe(i), file(f), ok(true) {} + bool operator()(const match_results<mapfile::iterator>& m) + { + pe->pdata->t = RegExData::type_pf; + pe->pdata->fm = m; + pe->pdata->update(); + ok = cb(file, *pe); + return ok; + } +}; +} +namespace{ +void BuildFileList(std::list<std::string>* pl, const char* files, bool recurse) +{ + file_iterator start(files); + file_iterator end; + if(recurse) + { + // go through sub directories: + char buf[MAX_PATH]; + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(buf, MAX_PATH, start.root())); + if(*buf == 0) + { + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(buf, MAX_PATH, ".")); + re_detail::overflow_error_if_not_zero(re_detail::strcat_s(buf, MAX_PATH, directory_iterator::separator())); + re_detail::overflow_error_if_not_zero(re_detail::strcat_s(buf, MAX_PATH, "*")); + } + else + { + re_detail::overflow_error_if_not_zero(re_detail::strcat_s(buf, MAX_PATH, directory_iterator::separator())); + re_detail::overflow_error_if_not_zero(re_detail::strcat_s(buf, MAX_PATH, "*")); + } + directory_iterator dstart(buf); + directory_iterator dend; + + // now get the file mask bit of "files": + const char* ptr = files; + while(*ptr) ++ptr; + while((ptr != files) && (*ptr != *directory_iterator::separator()) && (*ptr != '/'))--ptr; + if(ptr != files) ++ptr; + + while(dstart != dend) + { + // Verify that sprintf will not overflow: + if(std::strlen(dstart.path()) + std::strlen(directory_iterator::separator()) + std::strlen(ptr) >= MAX_PATH) + { + // Oops overflow, skip this item: + ++dstart; + continue; + } +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE) + int r = (::sprintf_s)(buf, sizeof(buf), "%s%s%s", dstart.path(), directory_iterator::separator(), ptr); +#else + int r = (std::sprintf)(buf, "%s%s%s", dstart.path(), directory_iterator::separator(), ptr); +#endif + if(r < 0) + { + // sprintf failed, skip this item: + ++dstart; + continue; + } + BuildFileList(pl, buf, recurse); + ++dstart; + } + } + while(start != end) + { + pl->push_back(*start); + ++start; + } +} +} + +unsigned int RegEx::GrepFiles(GrepFileCallback cb, const char* files, bool recurse, match_flag_type flags) +{ + unsigned int result = 0; + std::list<std::string> file_list; + BuildFileList(&file_list, files, recurse); + std::list<std::string>::iterator start, end; + start = file_list.begin(); + end = file_list.end(); + + while(start != end) + { + mapfile map((*start).c_str()); + pdata->t = re_detail::RegExData::type_pf; + pdata->fbase = map.begin(); + re_detail::pred4 pred(cb, this, (*start).c_str()); + int r = regex_grep(pred, map.begin(), map.end(), pdata->e, flags); + result += r; + ++start; + pdata->clean(); + if(pred.ok == false) + return result; + } + + return result; +} + + +unsigned int RegEx::FindFiles(FindFilesCallback cb, const char* files, bool recurse, match_flag_type flags) +{ + unsigned int result = 0; + std::list<std::string> file_list; + BuildFileList(&file_list, files, recurse); + std::list<std::string>::iterator start, end; + start = file_list.begin(); + end = file_list.end(); + + while(start != end) + { + mapfile map((*start).c_str()); + pdata->t = re_detail::RegExData::type_pf; + pdata->fbase = map.begin(); + + if(regex_search(map.begin(), map.end(), pdata->fm, pdata->e, flags)) + { + ++result; + if(false == cb((*start).c_str())) + return result; + } + //pdata->update(); + ++start; + //pdata->clean(); + } + + return result; +} +#endif + +#ifdef BOOST_REGEX_V3 +#define regex_replace regex_merge +#endif + +std::string RegEx::Merge(const std::string& in, const std::string& fmt, + bool copy, match_flag_type flags) +{ + std::string result; + re_detail::string_out_iterator<std::string> i(result); + if(!copy) flags |= format_no_copy; + regex_replace(i, in.begin(), in.end(), pdata->e, fmt.c_str(), flags); + return result; +} + +std::string RegEx::Merge(const char* in, const char* fmt, + bool copy, match_flag_type flags) +{ + std::string result; + if(!copy) flags |= format_no_copy; + re_detail::string_out_iterator<std::string> i(result); + regex_replace(i, in, in + std::strlen(in), pdata->e, fmt, flags); + return result; +} + +std::size_t RegEx::Split(std::vector<std::string>& v, + std::string& s, + match_flag_type flags, + unsigned max_count) +{ + return regex_split(std::back_inserter(v), s, pdata->e, flags, max_count); +} + + + +// +// now operators for returning what matched in more detail: +// +std::size_t RegEx::Position(int i)const +{ + switch(pdata->t) + { + case re_detail::RegExData::type_pc: + return pdata->m[i].matched ? pdata->m[i].first - pdata->pbase : RegEx::npos; +#ifndef BOOST_REGEX_NO_FILEITER + case re_detail::RegExData::type_pf: + return pdata->fm[i].matched ? pdata->fm[i].first - pdata->fbase : RegEx::npos; +#endif + case re_detail::RegExData::type_copy: + { + std::map<int, std::ptrdiff_t, std::less<int> >::iterator pos = pdata->positions.find(i); + if(pos == pdata->positions.end()) + return RegEx::npos; + return (*pos).second; + } + } + return RegEx::npos; +} + +std::size_t RegEx::Marks()const +{ + return pdata->e.mark_count(); +} + + +std::size_t RegEx::Length(int i)const +{ + switch(pdata->t) + { + case re_detail::RegExData::type_pc: + return pdata->m[i].matched ? pdata->m[i].second - pdata->m[i].first : RegEx::npos; +#ifndef BOOST_REGEX_NO_FILEITER + case re_detail::RegExData::type_pf: + return pdata->fm[i].matched ? pdata->fm[i].second - pdata->fm[i].first : RegEx::npos; +#endif + case re_detail::RegExData::type_copy: + { + std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i); + if(pos == pdata->strings.end()) + return RegEx::npos; + return (*pos).second.size(); + } + } + return RegEx::npos; +} + +bool RegEx::Matched(int i)const +{ + switch(pdata->t) + { + case re_detail::RegExData::type_pc: + return pdata->m[i].matched; +#ifndef BOOST_REGEX_NO_FILEITER + case re_detail::RegExData::type_pf: + return pdata->fm[i].matched; +#endif + case re_detail::RegExData::type_copy: + { + std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i); + if(pos == pdata->strings.end()) + return false; + return true; + } + } + return false; +} + + +std::string RegEx::What(int i)const +{ + std::string result; + switch(pdata->t) + { + case re_detail::RegExData::type_pc: + if(pdata->m[i].matched) + result.assign(pdata->m[i].first, pdata->m[i].second); + break; + case re_detail::RegExData::type_pf: + if(pdata->m[i].matched) + result.assign(to_string(pdata->m[i].first, pdata->m[i].second)); + break; + case re_detail::RegExData::type_copy: + { + std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i); + if(pos != pdata->strings.end()) + result = (*pos).second; + break; + } + } + return result; +} + +const std::size_t RegEx::npos = ~static_cast<std::size_t>(0); + +} // namespace boost + +#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x550) && (__BORLANDC__ <= 0x551) && !defined(_RWSTD_COMPILE_INSTANTIATE) +// +// this is an ugly hack to work around an ugly problem: +// by default this file will produce unresolved externals during +// linking unless _RWSTD_COMPILE_INSTANTIATE is defined (Borland bug). +// However if _RWSTD_COMPILE_INSTANTIATE is defined then we get separate +// copies of basic_string's static data in the RTL and this DLL, this messes +// with basic_string's memory management and results in run-time crashes, +// Oh sweet joy of Catch 22.... +// +namespace std{ +template<> template<> +basic_string<char>& BOOST_REGEX_DECL +basic_string<char>::replace<const char*>(char* f1, char* f2, const char* i1, const char* i2) +{ + unsigned insert_pos = f1 - begin(); + unsigned remove_len = f2 - f1; + unsigned insert_len = i2 - i1; + unsigned org_size = size(); + if(insert_len > remove_len) + { + append(insert_len-remove_len, ' '); + std::copy_backward(begin() + insert_pos + remove_len, begin() + org_size, end()); + std::copy(i1, i2, begin() + insert_pos); + } + else + { + std::copy(begin() + insert_pos + remove_len, begin() + org_size, begin() + insert_pos + insert_len); + std::copy(i1, i2, begin() + insert_pos); + erase(size() + insert_len - remove_len); + } + return *this; +} +template<> template<> +basic_string<wchar_t>& BOOST_REGEX_DECL +basic_string<wchar_t>::replace<const wchar_t*>(wchar_t* f1, wchar_t* f2, const wchar_t* i1, const wchar_t* i2) +{ + unsigned insert_pos = f1 - begin(); + unsigned remove_len = f2 - f1; + unsigned insert_len = i2 - i1; + unsigned org_size = size(); + if(insert_len > remove_len) + { + append(insert_len-remove_len, ' '); + std::copy_backward(begin() + insert_pos + remove_len, begin() + org_size, end()); + std::copy(i1, i2, begin() + insert_pos); + } + else + { + std::copy(begin() + insert_pos + remove_len, begin() + org_size, begin() + insert_pos + insert_len); + std::copy(i1, i2, begin() + insert_pos); + erase(size() + insert_len - remove_len); + } + return *this; +} +} // namespace std +#endif + +#endif + + + + + + + + + + + + + + + + diff --git a/libs/regex/src/fileiter.cpp b/libs/regex/src/fileiter.cpp new file mode 100644 index 0000000000..38c0d2c3a5 --- /dev/null +++ b/libs/regex/src/fileiter.cpp @@ -0,0 +1,925 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: fileiter.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Implements file io primitives + directory searching for class boost::RegEx. + */ + + +#define BOOST_REGEX_SOURCE + +#include <climits> +#include <stdexcept> +#include <string> +#include <boost/throw_exception.hpp> +#include <boost/regex/v4/fileiter.hpp> +#include <boost/regex/v4/regex_workaround.hpp> +#include <boost/regex/pattern_except.hpp> + +#include <cstdio> +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std{ + using ::sprintf; + using ::fseek; + using ::fread; + using ::ftell; + using ::fopen; + using ::fclose; + using ::FILE; + using ::strcpy; + using ::strcpy; + using ::strcat; + using ::strcmp; + using ::strlen; +} +#endif + + +#ifndef BOOST_REGEX_NO_FILEITER + +#if defined(__CYGWIN__) || defined(__CYGWIN32__) +#include <sys/cygwin.h> +#endif + +#ifdef BOOST_MSVC +# pragma warning(disable: 4800) +#endif + +namespace boost{ + namespace re_detail{ +// start with the operating system specific stuff: + +#if (defined(__BORLANDC__) || defined(BOOST_REGEX_FI_WIN32_DIR) || defined(BOOST_MSVC)) && !defined(BOOST_RE_NO_WIN32) + +// platform is DOS or Windows +// directories are separated with '\\' +// and names are insensitive of case + +BOOST_REGEX_DECL const char* _fi_sep = "\\"; +const char* _fi_sep_alt = "/"; +#define BOOST_REGEX_FI_TRANSLATE(c) std::tolower(c) + +#else + +// platform is not DOS or Windows +// directories are separated with '/' +// and names are sensitive of case + +BOOST_REGEX_DECL const char* _fi_sep = "/"; +const char* _fi_sep_alt = _fi_sep; +#define BOOST_REGEX_FI_TRANSLATE(c) c + +#endif + +#ifdef BOOST_REGEX_FI_WIN32_MAP + +void mapfile::open(const char* file) +{ +#if defined(BOOST_NO_ANSI_APIS) + int filename_size = strlen(file); + LPWSTR wide_file = (LPWSTR)_alloca( (filename_size + 1) * sizeof(WCHAR) ); + if(::MultiByteToWideChar(CP_ACP, 0, file, filename_size, wide_file, filename_size + 1) == 0) + hfile = INVALID_HANDLE_VALUE; + else + hfile = CreateFileW(wide_file, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); +#elif defined(__CYGWIN__)||defined(__CYGWIN32__) + char win32file[ MAX_PATH ]; + cygwin_conv_to_win32_path( file, win32file ); + hfile = CreateFileA(win32file, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); +#else + hfile = CreateFileA(file, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); +#endif + if(hfile != INVALID_HANDLE_VALUE) + { + hmap = CreateFileMapping(hfile, 0, PAGE_READONLY, 0, 0, 0); + if((hmap == INVALID_HANDLE_VALUE) || (hmap == NULL)) + { + CloseHandle(hfile); + hmap = 0; + hfile = 0; + std::runtime_error err("Unable to create file mapping."); + boost::re_detail::raise_runtime_error(err); + } + _first = static_cast<const char*>(MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0)); + if(_first == 0) + { + CloseHandle(hmap); + CloseHandle(hfile); + hmap = 0; + hfile = 0; + std::runtime_error err("Unable to create file mapping."); + } + _last = _first + GetFileSize(hfile, 0); + } + else + { + hfile = 0; +#ifndef BOOST_NO_EXCEPTIONS + throw std::runtime_error("Unable to open file."); +#else + BOOST_REGEX_NOEH_ASSERT(hfile != INVALID_HANDLE_VALUE); +#endif + } +} + +void mapfile::close() +{ + if(hfile != INVALID_HANDLE_VALUE) + { + UnmapViewOfFile((void*)_first); + CloseHandle(hmap); + CloseHandle(hfile); + hmap = hfile = 0; + _first = _last = 0; + } +} + +#elif !defined(BOOST_RE_NO_STL) + +mapfile_iterator& mapfile_iterator::operator = (const mapfile_iterator& i) +{ + if(file && node) + file->unlock(node); + file = i.file; + node = i.node; + offset = i.offset; + if(file) + file->lock(node); + return *this; +} + +mapfile_iterator& mapfile_iterator::operator++ () +{ + if((++offset == mapfile::buf_size) && file) + { + ++node; + offset = 0; + file->lock(node); + file->unlock(node-1); + } + return *this; +} + +mapfile_iterator mapfile_iterator::operator++ (int) +{ + mapfile_iterator temp(*this); + if((++offset == mapfile::buf_size) && file) + { + ++node; + offset = 0; + file->lock(node); + file->unlock(node-1); + } + return temp; +} + +mapfile_iterator& mapfile_iterator::operator-- () +{ + if((offset == 0) && file) + { + --node; + offset = mapfile::buf_size - 1; + file->lock(node); + file->unlock(node + 1); + } + else + --offset; + return *this; +} + +mapfile_iterator mapfile_iterator::operator-- (int) +{ + mapfile_iterator temp(*this); + if((offset == 0) && file) + { + --node; + offset = mapfile::buf_size - 1; + file->lock(node); + file->unlock(node + 1); + } + else + --offset; + return temp; +} + +mapfile_iterator operator + (const mapfile_iterator& i, long off) +{ + mapfile_iterator temp(i); + temp += off; + return temp; +} + +mapfile_iterator operator - (const mapfile_iterator& i, long off) +{ + mapfile_iterator temp(i); + temp -= off; + return temp; +} + +mapfile::iterator mapfile::begin()const +{ + return mapfile_iterator(this, 0); +} + +mapfile::iterator mapfile::end()const +{ + return mapfile_iterator(this, _size); +} + +void mapfile::lock(pointer* node)const +{ + BOOST_ASSERT(node >= _first); + BOOST_ASSERT(node <= _last); + if(node < _last) + { + if(*node == 0) + { + if(condemed.empty()) + { + *node = new char[sizeof(int) + buf_size]; + *(reinterpret_cast<int*>(*node)) = 1; + } + else + { + pointer* p = condemed.front(); + condemed.pop_front(); + *node = *p; + *p = 0; + *(reinterpret_cast<int*>(*node)) = 1; + } + + std::size_t read_size = 0; + int read_pos = std::fseek(hfile, (node - _first) * buf_size, SEEK_SET); + + if(0 == read_pos && node == _last - 1) + read_size = std::fread(*node + sizeof(int), _size % buf_size, 1, hfile); + else + read_size = std::fread(*node + sizeof(int), buf_size, 1, hfile); +#ifndef BOOST_NO_EXCEPTIONS + if((read_size == 0) || (std::ferror(hfile))) + { + throw std::runtime_error("Unable to read file."); + } +#else + BOOST_REGEX_NOEH_ASSERT((0 == std::ferror(hfile)) && (read_size != 0)); +#endif + } + else + { + if(*reinterpret_cast<int*>(*node) == 0) + { + *reinterpret_cast<int*>(*node) = 1; + condemed.remove(node); + } + else + ++(*reinterpret_cast<int*>(*node)); + } + } +} + +void mapfile::unlock(pointer* node)const +{ + BOOST_ASSERT(node >= _first); + BOOST_ASSERT(node <= _last); + if(node < _last) + { + if(--(*reinterpret_cast<int*>(*node)) == 0) + { + condemed.push_back(node); + } + } +} + +long int get_file_length(std::FILE* hfile) +{ + long int result; + std::fseek(hfile, 0, SEEK_END); + result = std::ftell(hfile); + std::fseek(hfile, 0, SEEK_SET); + return result; +} + + +void mapfile::open(const char* file) +{ + hfile = std::fopen(file, "rb"); +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + if(hfile != 0) + { + _size = get_file_length(hfile); + long cnodes = (_size + buf_size - 1) / buf_size; + + // check that number of nodes is not too high: + if(cnodes > (long)((INT_MAX) / sizeof(pointer*))) + { + std::fclose(hfile); + hfile = 0; + _size = 0; + return; + } + + _first = new pointer[(int)cnodes]; + _last = _first + cnodes; + std::memset(_first, 0, cnodes*sizeof(pointer)); + } + else + { + std::runtime_error err("Unable to open file."); + } +#ifndef BOOST_NO_EXCEPTIONS + }catch(...) + { close(); throw; } +#endif +} + +void mapfile::close() +{ + if(hfile != 0) + { + pointer* p = _first; + while(p != _last) + { + if(*p) + delete[] *p; + ++p; + } + delete[] _first; + _size = 0; + _first = _last = 0; + std::fclose(hfile); + hfile = 0; + condemed.erase(condemed.begin(), condemed.end()); + } +} + + +#endif + +inline _fi_find_handle find_first_file(const char* wild, _fi_find_data& data) +{ +#ifdef BOOST_NO_ANSI_APIS + std::size_t wild_size = std::strlen(wild); + LPWSTR wide_wild = (LPWSTR)_alloca( (wild_size + 1) * sizeof(WCHAR) ); + if (::MultiByteToWideChar(CP_ACP, 0, wild, wild_size, wide_wild, wild_size + 1) == 0) + return _fi_invalid_handle; + + return FindFirstFileW(wide_wild, &data); +#else + return FindFirstFileA(wild, &data); +#endif +} + +inline bool find_next_file(_fi_find_handle hf, _fi_find_data& data) +{ +#ifdef BOOST_NO_ANSI_APIS + return FindNextFileW(hf, &data); +#else + return FindNextFileA(hf, &data); +#endif +} + +inline void copy_find_file_result_with_overflow_check(const _fi_find_data& data, char* path, size_t max_size) +{ +#ifdef BOOST_NO_ANSI_APIS + if (::WideCharToMultiByte(CP_ACP, 0, data.cFileName, -1, path, max_size, NULL, NULL) == 0) + re_detail::overflow_error_if_not_zero(1); +#else + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(path, max_size, data.cFileName)); +#endif +} + +inline bool is_not_current_or_parent_path_string(const _fi_find_data& data) +{ +#ifdef BOOST_NO_ANSI_APIS + return (std::wcscmp(data.cFileName, L".") && std::wcscmp(data.cFileName, L"..")); +#else + return (std::strcmp(data.cFileName, ".") && std::strcmp(data.cFileName, "..")); +#endif +} + + +file_iterator::file_iterator() +{ + _root = _path = 0; + ref = 0; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + _root = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_root) + _path = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_path) + ptr = _path; + *_path = 0; + *_root = 0; + ref = new file_iterator_ref(); + BOOST_REGEX_NOEH_ASSERT(ref) + ref->hf = _fi_invalid_handle; + ref->count = 1; +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + delete[] _root; + delete[] _path; + delete ref; + throw; + } +#endif +} + +file_iterator::file_iterator(const char* wild) +{ + _root = _path = 0; + ref = 0; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + _root = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_root) + _path = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_path) + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, wild)); + ptr = _root; + while(*ptr)++ptr; + while((ptr > _root) && (*ptr != *_fi_sep) && (*ptr != *_fi_sep_alt))--ptr; + if((ptr == _root) && ( (*ptr== *_fi_sep) || (*ptr==*_fi_sep_alt) ) ) + { + _root[1]='\0'; + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, _root)); + } + else + { + *ptr = 0; + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, _root)); + if(*_path == 0) + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, ".")); + re_detail::overflow_error_if_not_zero(re_detail::strcat_s(_path, MAX_PATH, _fi_sep)); + } + ptr = _path + std::strlen(_path); + + ref = new file_iterator_ref(); + BOOST_REGEX_NOEH_ASSERT(ref) + ref->hf = find_first_file(wild, ref->_data); + ref->count = 1; + + if(ref->hf == _fi_invalid_handle) + { + *_path = 0; + ptr = _path; + } + else + { + copy_find_file_result_with_overflow_check(ref->_data, ptr, (MAX_PATH - (ptr - _path))); + if(ref->_data.dwFileAttributes & _fi_dir) + next(); + } +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + delete[] _root; + delete[] _path; + delete ref; + throw; + } +#endif +} + +file_iterator::file_iterator(const file_iterator& other) +{ + _root = _path = 0; + ref = 0; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + _root = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_root) + _path = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_path) + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, other._root)); + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, other._path)); + ptr = _path + (other.ptr - other._path); + ref = other.ref; +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + delete[] _root; + delete[] _path; + throw; + } +#endif + ++(ref->count); +} + +file_iterator& file_iterator::operator=(const file_iterator& other) +{ + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, other._root)); + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, other._path)); + ptr = _path + (other.ptr - other._path); + if(--(ref->count) == 0) + { + if(ref->hf != _fi_invalid_handle) + FindClose(ref->hf); + delete ref; + } + ref = other.ref; + ++(ref->count); + return *this; +} + + +file_iterator::~file_iterator() +{ + delete[] _root; + delete[] _path; + if(--(ref->count) == 0) + { + if(ref->hf != _fi_invalid_handle) + FindClose(ref->hf); + delete ref; + } +} + +file_iterator file_iterator::operator++(int) +{ + file_iterator temp(*this); + next(); + return temp; +} + + +void file_iterator::next() +{ + if(ref->hf != _fi_invalid_handle) + { + bool cont = true; + while(cont) + { + cont = find_next_file(ref->hf, ref->_data); + if(cont && ((ref->_data.dwFileAttributes & _fi_dir) == 0)) + break; + } + if(!cont) + { + // end of sequence + FindClose(ref->hf); + ref->hf = _fi_invalid_handle; + *_path = 0; + ptr = _path; + } + else + copy_find_file_result_with_overflow_check(ref->_data, ptr, MAX_PATH - (ptr - _path)); + } +} + + + +directory_iterator::directory_iterator() +{ + _root = _path = 0; + ref = 0; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + _root = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_root) + _path = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_path) + ptr = _path; + *_path = 0; + *_root = 0; + ref = new file_iterator_ref(); + BOOST_REGEX_NOEH_ASSERT(ref) + ref->hf = _fi_invalid_handle; + ref->count = 1; +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + delete[] _root; + delete[] _path; + delete ref; + throw; + } +#endif +} + +directory_iterator::directory_iterator(const char* wild) +{ + _root = _path = 0; + ref = 0; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + _root = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_root) + _path = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_path) + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, wild)); + ptr = _root; + while(*ptr)++ptr; + while((ptr > _root) && (*ptr != *_fi_sep) && (*ptr != *_fi_sep_alt))--ptr; + + if((ptr == _root) && ( (*ptr== *_fi_sep) || (*ptr==*_fi_sep_alt) ) ) + { + _root[1]='\0'; + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, _root)); + } + else + { + *ptr = 0; + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, _root)); + if(*_path == 0) + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, ".")); + re_detail::overflow_error_if_not_zero(re_detail::strcat_s(_path, MAX_PATH, _fi_sep)); + } + ptr = _path + std::strlen(_path); + + ref = new file_iterator_ref(); + BOOST_REGEX_NOEH_ASSERT(ref) + ref->count = 1; + ref->hf = find_first_file(wild, ref->_data); + if(ref->hf == _fi_invalid_handle) + { + *_path = 0; + ptr = _path; + } + else + { + copy_find_file_result_with_overflow_check(ref->_data, ptr, MAX_PATH - (ptr - _path)); + if(((ref->_data.dwFileAttributes & _fi_dir) == 0) || (std::strcmp(ptr, ".") == 0) || (std::strcmp(ptr, "..") == 0)) + next(); + } +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + delete[] _root; + delete[] _path; + delete ref; + throw; + } +#endif +} + +directory_iterator::~directory_iterator() +{ + delete[] _root; + delete[] _path; + if(--(ref->count) == 0) + { + if(ref->hf != _fi_invalid_handle) + FindClose(ref->hf); + delete ref; + } +} + +directory_iterator::directory_iterator(const directory_iterator& other) +{ + _root = _path = 0; + ref = 0; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + _root = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_root) + _path = new char[MAX_PATH]; + BOOST_REGEX_NOEH_ASSERT(_path) + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, other._root)); + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, other._path)); + ptr = _path + (other.ptr - other._path); + ref = other.ref; +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + delete[] _root; + delete[] _path; + throw; + } +#endif + ++(ref->count); +} + +directory_iterator& directory_iterator::operator=(const directory_iterator& other) +{ + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, other._root)); + re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, other._path)); + ptr = _path + (other.ptr - other._path); + if(--(ref->count) == 0) + { + if(ref->hf != _fi_invalid_handle) + FindClose(ref->hf); + delete ref; + } + ref = other.ref; + ++(ref->count); + return *this; +} + +directory_iterator directory_iterator::operator++(int) +{ + directory_iterator temp(*this); + next(); + return temp; +} + +void directory_iterator::next() +{ + if(ref->hf != _fi_invalid_handle) + { + bool cont = true; + while(cont) + { + cont = find_next_file(ref->hf, ref->_data); + if(cont && (ref->_data.dwFileAttributes & _fi_dir)) + { + if(is_not_current_or_parent_path_string(ref->_data)) + break; + } + } + if(!cont) + { + // end of sequence + FindClose(ref->hf); + ref->hf = _fi_invalid_handle; + *_path = 0; + ptr = _path; + } + else + copy_find_file_result_with_overflow_check(ref->_data, ptr, MAX_PATH - (ptr - _path)); + } +} + + +#ifdef BOOST_REGEX_FI_POSIX_DIR + +struct _fi_priv_data +{ + char root[MAX_PATH]; + char* mask; + DIR* d; + _fi_priv_data(const char* p); +}; + +_fi_priv_data::_fi_priv_data(const char* p) +{ + std::strcpy(root, p); + mask = root; + while(*mask) ++mask; + while((mask > root) && (*mask != *_fi_sep) && (*mask != *_fi_sep_alt)) --mask; + if(mask == root && ((*mask== *_fi_sep) || (*mask == *_fi_sep_alt)) ) + { + root[1] = '\0'; + std::strcpy(root+2, p+1); + mask = root+2; + } + else if(mask == root) + { + root[0] = '.'; + root[1] = '\0'; + std::strcpy(root+2, p); + mask = root+2; + } + else + { + *mask = 0; + ++mask; + } +} + +bool iswild(const char* mask, const char* name) +{ + while(*mask && *name) + { + switch(*mask) + { + case '?': + ++name; + ++mask; + continue; + case '*': + ++mask; + if(*mask == 0) + return true; + while(*name) + { + if(iswild(mask, name)) + return true; + ++name; + } + return false; + case '.': + if(0 == *name) + { + ++mask; + continue; + } + // fall through: + default: + if(BOOST_REGEX_FI_TRANSLATE(*mask) != BOOST_REGEX_FI_TRANSLATE(*name)) + return false; + ++mask; + ++name; + continue; + } + } + if(*mask != *name) + return false; + return true; +} + +unsigned _fi_attributes(const char* root, const char* name) +{ + char buf[MAX_PATH]; + // verify that we can not overflow: + if(std::strlen(root) + std::strlen(_fi_sep) + std::strlen(name) >= MAX_PATH) + return 0; + int r; + if( ( (root[0] == *_fi_sep) || (root[0] == *_fi_sep_alt) ) && (root[1] == '\0') ) + r = (std::sprintf)(buf, "%s%s", root, name); + else + r = (std::sprintf)(buf, "%s%s%s", root, _fi_sep, name); + if(r < 0) + return 0; // sprintf failed + DIR* d = opendir(buf); + if(d) + { + closedir(d); + return _fi_dir; + } + return 0; +} + +_fi_find_handle _fi_FindFirstFile(const char* lpFileName, _fi_find_data* lpFindFileData) +{ + _fi_find_handle dat = new _fi_priv_data(lpFileName); + + DIR* h = opendir(dat->root); + dat->d = h; + if(h != 0) + { + if(_fi_FindNextFile(dat, lpFindFileData)) + return dat; + } + delete dat; + return 0; +} + +bool _fi_FindNextFile(_fi_find_handle dat, _fi_find_data* lpFindFileData) +{ + dirent* d; + do + { + d = readdir(dat->d); + } while(d && !iswild(dat->mask, d->d_name)); + + if(d) + { + std::strcpy(lpFindFileData->cFileName, d->d_name); + lpFindFileData->dwFileAttributes = _fi_attributes(dat->root, d->d_name); + return true; + } + return false; +} + +bool _fi_FindClose(_fi_find_handle dat) +{ + closedir(dat->d); + delete dat; + return true; +} + +#endif + +} // namespace re_detail +} // namspace boost + +#endif // BOOST_REGEX_NO_FILEITER + + + + + + + + + + + + diff --git a/libs/regex/src/icu.cpp b/libs/regex/src/icu.cpp new file mode 100644 index 0000000000..2fa2b3b17e --- /dev/null +++ b/libs/regex/src/icu.cpp @@ -0,0 +1,507 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE icu.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Unicode regular expressions on top of the ICU Library. + */ +#define BOOST_REGEX_SOURCE + +#include <boost/regex/config.hpp> +#ifdef BOOST_HAS_ICU +#define BOOST_REGEX_ICU_INSTANTIATE +#include <boost/regex/icu.hpp> + +#ifdef BOOST_INTEL +#pragma warning(disable:981 2259 383) +#endif + +namespace boost{ + +namespace re_detail{ + +icu_regex_traits_implementation::string_type icu_regex_traits_implementation::do_transform(const char_type* p1, const char_type* p2, const U_NAMESPACE_QUALIFIER Collator* pcoll) const +{ + // TODO make thread safe!!!! : + typedef u32_to_u16_iterator<const char_type*, ::UChar> itt; + itt i(p1), j(p2); +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + std::vector< ::UChar> t(i, j); +#else + std::vector< ::UChar> t; + while(i != j) + t.push_back(*i++); +#endif + ::uint8_t result[100]; + ::int32_t len; + if(t.size()) + len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), result, sizeof(result)); + else + len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), result, sizeof(result)); + if(std::size_t(len) > sizeof(result)) + { + scoped_array< ::uint8_t> presult(new ::uint8_t[len+1]); + if(t.size()) + len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), presult.get(), len+1); + else + len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), presult.get(), len+1); + if((0 == presult[len-1]) && (len > 1)) + --len; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + return string_type(presult.get(), presult.get()+len); +#else + string_type sresult; + ::uint8_t const* ia = presult.get(); + ::uint8_t const* ib = presult.get()+len; + while(ia != ib) + sresult.push_back(*ia++); + return sresult; +#endif + } + if((0 == result[len-1]) && (len > 1)) + --len; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + return string_type(result, result+len); +#else + string_type sresult; + ::uint8_t const* ia = result; + ::uint8_t const* ib = result+len; + while(ia != ib) + sresult.push_back(*ia++); + return sresult; +#endif +} + +} + +icu_regex_traits::size_type icu_regex_traits::length(const char_type* p) +{ + size_type result = 0; + while(*p) + { + ++p; + ++result; + } + return result; +} + +// +// define our bitmasks: +// +const icu_regex_traits::char_class_type icu_regex_traits::mask_blank = icu_regex_traits::char_class_type(1) << offset_blank; +const icu_regex_traits::char_class_type icu_regex_traits::mask_space = icu_regex_traits::char_class_type(1) << offset_space; +const icu_regex_traits::char_class_type icu_regex_traits::mask_xdigit = icu_regex_traits::char_class_type(1) << offset_xdigit; +const icu_regex_traits::char_class_type icu_regex_traits::mask_underscore = icu_regex_traits::char_class_type(1) << offset_underscore; +const icu_regex_traits::char_class_type icu_regex_traits::mask_unicode = icu_regex_traits::char_class_type(1) << offset_unicode; +const icu_regex_traits::char_class_type icu_regex_traits::mask_any = icu_regex_traits::char_class_type(1) << offset_any; +const icu_regex_traits::char_class_type icu_regex_traits::mask_ascii = icu_regex_traits::char_class_type(1) << offset_ascii; +const icu_regex_traits::char_class_type icu_regex_traits::mask_horizontal = icu_regex_traits::char_class_type(1) << offset_horizontal; +const icu_regex_traits::char_class_type icu_regex_traits::mask_vertical = icu_regex_traits::char_class_type(1) << offset_vertical; + +icu_regex_traits::char_class_type icu_regex_traits::lookup_icu_mask(const ::UChar32* p1, const ::UChar32* p2) +{ + static const ::UChar32 prop_name_table[] = { + /* any */ 'a', 'n', 'y', + /* ascii */ 'a', 's', 'c', 'i', 'i', + /* assigned */ 'a', 's', 's', 'i', 'g', 'n', 'e', 'd', + /* c* */ 'c', '*', + /* cc */ 'c', 'c', + /* cf */ 'c', 'f', + /* closepunctuation */ 'c', 'l', 'o', 's', 'e', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', + /* cn */ 'c', 'n', + /* co */ 'c', 'o', + /* connectorpunctuation */ 'c', 'o', 'n', 'n', 'e', 'c', 't', 'o', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', + /* control */ 'c', 'o', 'n', 't', 'r', 'o', 'l', + /* cs */ 'c', 's', + /* currencysymbol */ 'c', 'u', 'r', 'r', 'e', 'n', 'c', 'y', 's', 'y', 'm', 'b', 'o', 'l', + /* dashpunctuation */ 'd', 'a', 's', 'h', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', + /* decimaldigitnumber */ 'd', 'e', 'c', 'i', 'm', 'a', 'l', 'd', 'i', 'g', 'i', 't', 'n', 'u', 'm', 'b', 'e', 'r', + /* enclosingmark */ 'e', 'n', 'c', 'l', 'o', 's', 'i', 'n', 'g', 'm', 'a', 'r', 'k', + /* finalpunctuation */ 'f', 'i', 'n', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', + /* format */ 'f', 'o', 'r', 'm', 'a', 't', + /* initialpunctuation */ 'i', 'n', 'i', 't', 'i', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', + /* l* */ 'l', '*', + /* letter */ 'l', 'e', 't', 't', 'e', 'r', + /* letternumber */ 'l', 'e', 't', 't', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r', + /* lineseparator */ 'l', 'i', 'n', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', + /* ll */ 'l', 'l', + /* lm */ 'l', 'm', + /* lo */ 'l', 'o', + /* lowercaseletter */ 'l', 'o', 'w', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', + /* lt */ 'l', 't', + /* lu */ 'l', 'u', + /* m* */ 'm', '*', + /* mark */ 'm', 'a', 'r', 'k', + /* mathsymbol */ 'm', 'a', 't', 'h', 's', 'y', 'm', 'b', 'o', 'l', + /* mc */ 'm', 'c', + /* me */ 'm', 'e', + /* mn */ 'm', 'n', + /* modifierletter */ 'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r', + /* modifiersymbol */ 'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l', + /* n* */ 'n', '*', + /* nd */ 'n', 'd', + /* nl */ 'n', 'l', + /* no */ 'n', 'o', + /* nonspacingmark */ 'n', 'o', 'n', 's', 'p', 'a', 'c', 'i', 'n', 'g', 'm', 'a', 'r', 'k', + /* notassigned */ 'n', 'o', 't', 'a', 's', 's', 'i', 'g', 'n', 'e', 'd', + /* number */ 'n', 'u', 'm', 'b', 'e', 'r', + /* openpunctuation */ 'o', 'p', 'e', 'n', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', + /* other */ 'o', 't', 'h', 'e', 'r', + /* otherletter */ 'o', 't', 'h', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r', + /* othernumber */ 'o', 't', 'h', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r', + /* otherpunctuation */ 'o', 't', 'h', 'e', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', + /* othersymbol */ 'o', 't', 'h', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l', + /* p* */ 'p', '*', + /* paragraphseparator */ 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', + /* pc */ 'p', 'c', + /* pd */ 'p', 'd', + /* pe */ 'p', 'e', + /* pf */ 'p', 'f', + /* pi */ 'p', 'i', + /* po */ 'p', 'o', + /* privateuse */ 'p', 'r', 'i', 'v', 'a', 't', 'e', 'u', 's', 'e', + /* ps */ 'p', 's', + /* punctuation */ 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', + /* s* */ 's', '*', + /* sc */ 's', 'c', + /* separator */ 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', + /* sk */ 's', 'k', + /* sm */ 's', 'm', + /* so */ 's', 'o', + /* spaceseparator */ 's', 'p', 'a', 'c', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', + /* spacingcombiningmark */ 's', 'p', 'a', 'c', 'i', 'n', 'g', 'c', 'o', 'm', 'b', 'i', 'n', 'i', 'n', 'g', 'm', 'a', 'r', 'k', + /* surrogate */ 's', 'u', 'r', 'r', 'o', 'g', 'a', 't', 'e', + /* symbol */ 's', 'y', 'm', 'b', 'o', 'l', + /* titlecase */ 't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e', + /* titlecaseletter */ 't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', + /* uppercaseletter */ 'u', 'p', 'p', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', + /* z* */ 'z', '*', + /* zl */ 'z', 'l', + /* zp */ 'z', 'p', + /* zs */ 'z', 's', + }; + + static const re_detail::character_pointer_range< ::UChar32> range_data[] = { + { prop_name_table+0, prop_name_table+3, }, // any + { prop_name_table+3, prop_name_table+8, }, // ascii + { prop_name_table+8, prop_name_table+16, }, // assigned + { prop_name_table+16, prop_name_table+18, }, // c* + { prop_name_table+18, prop_name_table+20, }, // cc + { prop_name_table+20, prop_name_table+22, }, // cf + { prop_name_table+22, prop_name_table+38, }, // closepunctuation + { prop_name_table+38, prop_name_table+40, }, // cn + { prop_name_table+40, prop_name_table+42, }, // co + { prop_name_table+42, prop_name_table+62, }, // connectorpunctuation + { prop_name_table+62, prop_name_table+69, }, // control + { prop_name_table+69, prop_name_table+71, }, // cs + { prop_name_table+71, prop_name_table+85, }, // currencysymbol + { prop_name_table+85, prop_name_table+100, }, // dashpunctuation + { prop_name_table+100, prop_name_table+118, }, // decimaldigitnumber + { prop_name_table+118, prop_name_table+131, }, // enclosingmark + { prop_name_table+131, prop_name_table+147, }, // finalpunctuation + { prop_name_table+147, prop_name_table+153, }, // format + { prop_name_table+153, prop_name_table+171, }, // initialpunctuation + { prop_name_table+171, prop_name_table+173, }, // l* + { prop_name_table+173, prop_name_table+179, }, // letter + { prop_name_table+179, prop_name_table+191, }, // letternumber + { prop_name_table+191, prop_name_table+204, }, // lineseparator + { prop_name_table+204, prop_name_table+206, }, // ll + { prop_name_table+206, prop_name_table+208, }, // lm + { prop_name_table+208, prop_name_table+210, }, // lo + { prop_name_table+210, prop_name_table+225, }, // lowercaseletter + { prop_name_table+225, prop_name_table+227, }, // lt + { prop_name_table+227, prop_name_table+229, }, // lu + { prop_name_table+229, prop_name_table+231, }, // m* + { prop_name_table+231, prop_name_table+235, }, // mark + { prop_name_table+235, prop_name_table+245, }, // mathsymbol + { prop_name_table+245, prop_name_table+247, }, // mc + { prop_name_table+247, prop_name_table+249, }, // me + { prop_name_table+249, prop_name_table+251, }, // mn + { prop_name_table+251, prop_name_table+265, }, // modifierletter + { prop_name_table+265, prop_name_table+279, }, // modifiersymbol + { prop_name_table+279, prop_name_table+281, }, // n* + { prop_name_table+281, prop_name_table+283, }, // nd + { prop_name_table+283, prop_name_table+285, }, // nl + { prop_name_table+285, prop_name_table+287, }, // no + { prop_name_table+287, prop_name_table+301, }, // nonspacingmark + { prop_name_table+301, prop_name_table+312, }, // notassigned + { prop_name_table+312, prop_name_table+318, }, // number + { prop_name_table+318, prop_name_table+333, }, // openpunctuation + { prop_name_table+333, prop_name_table+338, }, // other + { prop_name_table+338, prop_name_table+349, }, // otherletter + { prop_name_table+349, prop_name_table+360, }, // othernumber + { prop_name_table+360, prop_name_table+376, }, // otherpunctuation + { prop_name_table+376, prop_name_table+387, }, // othersymbol + { prop_name_table+387, prop_name_table+389, }, // p* + { prop_name_table+389, prop_name_table+407, }, // paragraphseparator + { prop_name_table+407, prop_name_table+409, }, // pc + { prop_name_table+409, prop_name_table+411, }, // pd + { prop_name_table+411, prop_name_table+413, }, // pe + { prop_name_table+413, prop_name_table+415, }, // pf + { prop_name_table+415, prop_name_table+417, }, // pi + { prop_name_table+417, prop_name_table+419, }, // po + { prop_name_table+419, prop_name_table+429, }, // privateuse + { prop_name_table+429, prop_name_table+431, }, // ps + { prop_name_table+431, prop_name_table+442, }, // punctuation + { prop_name_table+442, prop_name_table+444, }, // s* + { prop_name_table+444, prop_name_table+446, }, // sc + { prop_name_table+446, prop_name_table+455, }, // separator + { prop_name_table+455, prop_name_table+457, }, // sk + { prop_name_table+457, prop_name_table+459, }, // sm + { prop_name_table+459, prop_name_table+461, }, // so + { prop_name_table+461, prop_name_table+475, }, // spaceseparator + { prop_name_table+475, prop_name_table+495, }, // spacingcombiningmark + { prop_name_table+495, prop_name_table+504, }, // surrogate + { prop_name_table+504, prop_name_table+510, }, // symbol + { prop_name_table+510, prop_name_table+519, }, // titlecase + { prop_name_table+519, prop_name_table+534, }, // titlecaseletter + { prop_name_table+534, prop_name_table+549, }, // uppercaseletter + { prop_name_table+549, prop_name_table+551, }, // z* + { prop_name_table+551, prop_name_table+553, }, // zl + { prop_name_table+553, prop_name_table+555, }, // zp + { prop_name_table+555, prop_name_table+557, }, // zs + }; + + static const icu_regex_traits::char_class_type icu_class_map[] = { + icu_regex_traits::mask_any, // any + icu_regex_traits::mask_ascii, // ascii + (0x3FFFFFFFu) & ~(U_GC_CN_MASK), // assigned + U_GC_C_MASK, // c* + U_GC_CC_MASK, // cc + U_GC_CF_MASK, // cf + U_GC_PE_MASK, // closepunctuation + U_GC_CN_MASK, // cn + U_GC_CO_MASK, // co + U_GC_PC_MASK, // connectorpunctuation + U_GC_CC_MASK, // control + U_GC_CS_MASK, // cs + U_GC_SC_MASK, // currencysymbol + U_GC_PD_MASK, // dashpunctuation + U_GC_ND_MASK, // decimaldigitnumber + U_GC_ME_MASK, // enclosingmark + U_GC_PF_MASK, // finalpunctuation + U_GC_CF_MASK, // format + U_GC_PI_MASK, // initialpunctuation + U_GC_L_MASK, // l* + U_GC_L_MASK, // letter + U_GC_NL_MASK, // letternumber + U_GC_ZL_MASK, // lineseparator + U_GC_LL_MASK, // ll + U_GC_LM_MASK, // lm + U_GC_LO_MASK, // lo + U_GC_LL_MASK, // lowercaseletter + U_GC_LT_MASK, // lt + U_GC_LU_MASK, // lu + U_GC_M_MASK, // m* + U_GC_M_MASK, // mark + U_GC_SM_MASK, // mathsymbol + U_GC_MC_MASK, // mc + U_GC_ME_MASK, // me + U_GC_MN_MASK, // mn + U_GC_LM_MASK, // modifierletter + U_GC_SK_MASK, // modifiersymbol + U_GC_N_MASK, // n* + U_GC_ND_MASK, // nd + U_GC_NL_MASK, // nl + U_GC_NO_MASK, // no + U_GC_MN_MASK, // nonspacingmark + U_GC_CN_MASK, // notassigned + U_GC_N_MASK, // number + U_GC_PS_MASK, // openpunctuation + U_GC_C_MASK, // other + U_GC_LO_MASK, // otherletter + U_GC_NO_MASK, // othernumber + U_GC_PO_MASK, // otherpunctuation + U_GC_SO_MASK, // othersymbol + U_GC_P_MASK, // p* + U_GC_ZP_MASK, // paragraphseparator + U_GC_PC_MASK, // pc + U_GC_PD_MASK, // pd + U_GC_PE_MASK, // pe + U_GC_PF_MASK, // pf + U_GC_PI_MASK, // pi + U_GC_PO_MASK, // po + U_GC_CO_MASK, // privateuse + U_GC_PS_MASK, // ps + U_GC_P_MASK, // punctuation + U_GC_S_MASK, // s* + U_GC_SC_MASK, // sc + U_GC_Z_MASK, // separator + U_GC_SK_MASK, // sk + U_GC_SM_MASK, // sm + U_GC_SO_MASK, // so + U_GC_ZS_MASK, // spaceseparator + U_GC_MC_MASK, // spacingcombiningmark + U_GC_CS_MASK, // surrogate + U_GC_S_MASK, // symbol + U_GC_LT_MASK, // titlecase + U_GC_LT_MASK, // titlecaseletter + U_GC_LU_MASK, // uppercaseletter + U_GC_Z_MASK, // z* + U_GC_ZL_MASK, // zl + U_GC_ZP_MASK, // zp + U_GC_ZS_MASK, // zs + }; + + + static const re_detail::character_pointer_range< ::UChar32>* ranges_begin = range_data; + static const re_detail::character_pointer_range< ::UChar32>* ranges_end = range_data + (sizeof(range_data)/sizeof(range_data[0])); + + re_detail::character_pointer_range< ::UChar32> t = { p1, p2, }; + const re_detail::character_pointer_range< ::UChar32>* p = std::lower_bound(ranges_begin, ranges_end, t); + if((p != ranges_end) && (t == *p)) + return icu_class_map[p - ranges_begin]; + return 0; +} + +icu_regex_traits::char_class_type icu_regex_traits::lookup_classname(const char_type* p1, const char_type* p2) const +{ + static const char_class_type masks[] = + { + 0, + U_GC_L_MASK | U_GC_ND_MASK, + U_GC_L_MASK, + mask_blank, + U_GC_CC_MASK | U_GC_CF_MASK | U_GC_ZL_MASK | U_GC_ZP_MASK, + U_GC_ND_MASK, + U_GC_ND_MASK, + (0x3FFFFFFFu) & ~(U_GC_CC_MASK | U_GC_CF_MASK | U_GC_CS_MASK | U_GC_CN_MASK | U_GC_Z_MASK), + mask_horizontal, + U_GC_LL_MASK, + U_GC_LL_MASK, + ~(U_GC_C_MASK), + U_GC_P_MASK, + char_class_type(U_GC_Z_MASK) | mask_space, + char_class_type(U_GC_Z_MASK) | mask_space, + U_GC_LU_MASK, + mask_unicode, + U_GC_LU_MASK, + mask_vertical, + char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore, + char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore, + char_class_type(U_GC_ND_MASK) | mask_xdigit, + }; + + int idx = ::boost::re_detail::get_default_class_id(p1, p2); + if(idx >= 0) + return masks[idx+1]; + char_class_type result = lookup_icu_mask(p1, p2); + if(result != 0) + return result; + + if(idx < 0) + { + string_type s(p1, p2); + string_type::size_type i = 0; + while(i < s.size()) + { + s[i] = static_cast<char>((::u_tolower)(s[i])); + if(::u_isspace(s[i]) || (s[i] == '-') || (s[i] == '_')) + s.erase(s.begin()+i, s.begin()+i+1); + else + { + s[i] = static_cast<char>((::u_tolower)(s[i])); + ++i; + } + } + if(s.size()) + idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size()); + if(idx >= 0) + return masks[idx+1]; + if(s.size()) + result = lookup_icu_mask(&*s.begin(), &*s.begin() + s.size()); + if(result != 0) + return result; + } + BOOST_ASSERT(std::size_t(idx+1) < sizeof(masks) / sizeof(masks[0])); + return masks[idx+1]; +} + +icu_regex_traits::string_type icu_regex_traits::lookup_collatename(const char_type* p1, const char_type* p2) const +{ + string_type result; + if(std::find_if(p1, p2, std::bind2nd(std::greater< ::UChar32>(), 0x7f)) == p2) + { +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + std::string s(p1, p2); +#else + std::string s; + const char_type* p3 = p1; + while(p3 != p2) + s.append(1, *p3++); +#endif + // Try Unicode name: + UErrorCode err = U_ZERO_ERROR; + UChar32 c = ::u_charFromName(U_UNICODE_CHAR_NAME, s.c_str(), &err); + if(U_SUCCESS(err)) + { + result.push_back(c); + return result; + } + // Try Unicode-extended name: + err = U_ZERO_ERROR; + c = ::u_charFromName(U_EXTENDED_CHAR_NAME, s.c_str(), &err); + if(U_SUCCESS(err)) + { + result.push_back(c); + return result; + } + // try POSIX name: + s = ::boost::re_detail::lookup_default_collate_name(s); +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + result.assign(s.begin(), s.end()); +#else + result.clear(); + std::string::const_iterator si, sj; + si = s.begin(); + sj = s.end(); + while(si != sj) + result.push_back(*si++); +#endif + } + if(result.empty() && (p2-p1 == 1)) + result.push_back(*p1); + return result; +} + +bool icu_regex_traits::isctype(char_type c, char_class_type f) const +{ + // check for standard catagories first: + char_class_type m = char_class_type(1u << u_charType(c)); + if((m & f) != 0) + return true; + // now check for special cases: + if(((f & mask_blank) != 0) && u_isblank(c)) + return true; + if(((f & mask_space) != 0) && u_isspace(c)) + return true; + if(((f & mask_xdigit) != 0) && (u_digit(c, 16) >= 0)) + return true; + if(((f & mask_unicode) != 0) && (c >= 0x100)) + return true; + if(((f & mask_underscore) != 0) && (c == '_')) + return true; + if(((f & mask_any) != 0) && (c <= 0x10FFFF)) + return true; + if(((f & mask_ascii) != 0) && (c <= 0x7F)) + return true; + if(((f & mask_vertical) != 0) && (::boost::re_detail::is_separator(c) || (c == static_cast<char_type>('\v')) || (m == U_GC_ZL_MASK) || (m == U_GC_ZP_MASK))) + return true; + if(((f & mask_horizontal) != 0) && !::boost::re_detail::is_separator(c) && u_isspace(c) && (c != static_cast<char_type>('\v'))) + return true; + return false; +} + +} + +#endif // BOOST_HAS_ICU diff --git a/libs/regex/src/instances.cpp b/libs/regex/src/instances.cpp new file mode 100644 index 0000000000..69d72ad6e1 --- /dev/null +++ b/libs/regex/src/instances.cpp @@ -0,0 +1,32 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: instances.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: regex narrow character template instances. + */ + +#define BOOST_REGEX_SOURCE + +#include <boost/regex/config.hpp> + +#if !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES) +#define BOOST_REGEX_NARROW_INSTANTIATE + +#ifdef __BORLANDC__ +#pragma hrdstop +#endif + +#include <boost/regex.hpp> + +#endif diff --git a/libs/regex/src/internals.hpp b/libs/regex/src/internals.hpp new file mode 100644 index 0000000000..3a15cc67cb --- /dev/null +++ b/libs/regex/src/internals.hpp @@ -0,0 +1,35 @@ +/* + * + * Copyright (c) 2011 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#ifndef BOOST_REGEX_SRC_INTERNALS_HPP +#define BOOST_REGEX_SRC_INTERNALS_HPP + +enum +{ + char_class_space=1<<0, + char_class_print=1<<1, + char_class_cntrl=1<<2, + char_class_upper=1<<3, + char_class_lower=1<<4, + char_class_alpha=1<<5, + char_class_digit=1<<6, + char_class_punct=1<<7, + char_class_xdigit=1<<8, + char_class_alnum=char_class_alpha|char_class_digit, + char_class_graph=char_class_alnum|char_class_punct, + char_class_blank=1<<9, + char_class_word=1<<10, + char_class_unicode=1<<11, + char_class_horizontal=1<<12, + char_class_vertical=1<<13 +}; + +#endif // BOOST_REGEX_SRC_INTERNALS_HPP diff --git a/libs/regex/src/posix_api.cpp b/libs/regex/src/posix_api.cpp new file mode 100644 index 0000000000..abafd8f231 --- /dev/null +++ b/libs/regex/src/posix_api.cpp @@ -0,0 +1,295 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: posix_api.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Implements the Posix API wrappers. + */ + +#define BOOST_REGEX_SOURCE + +#include <cstdio> +#include <boost/regex.hpp> +#include <boost/cregex.hpp> + +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std{ + using ::sprintf; + using ::strcpy; + using ::strcmp; +} +#endif + + +namespace boost{ + +namespace{ + +unsigned int magic_value = 25631; + +const char* names[] = { + "REG_NOERROR", + "REG_NOMATCH", + "REG_BADPAT", + "REG_ECOLLATE", + "REG_ECTYPE", + "REG_EESCAPE", + "REG_ESUBREG", + "REG_EBRACK", + "REG_EPAREN", + "REG_EBRACE", + "REG_BADBR", + "REG_ERANGE", + "REG_ESPACE", + "REG_BADRPT", + "REG_EEND", + "REG_ESIZE", + "REG_ERPAREN", + "REG_EMPTY", + "REG_ECOMPLEXITY", + "REG_ESTACK", + "REG_E_PERL", + "REG_E_UNKNOWN", +}; +} // namespace + +typedef boost::basic_regex<char, c_regex_traits<char> > c_regex_type; + +BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompA(regex_tA* expression, const char* ptr, int f) +{ + if(expression->re_magic != magic_value) + { + expression->guts = 0; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + expression->guts = new c_regex_type(); +#ifndef BOOST_NO_EXCEPTIONS + } catch(...) + { + return REG_ESPACE; + } +#else + if(0 == expression->guts) + return REG_E_MEMORY; +#endif + } + // set default flags: + boost::uint_fast32_t flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? regex::extended : regex::basic); + expression->eflags = (f & REG_NEWLINE) ? match_not_dot_newline : match_default; + // and translate those that are actually set: + + if(f & REG_NOCOLLATE) + { + flags |= regex::nocollate; +#ifndef BOOST_REGEX_V3 + flags &= ~regex::collate; +#endif + } + + if(f & REG_NOSUB) + { + //expression->eflags |= match_any; + flags |= regex::nosubs; + } + + if(f & REG_NOSPEC) + flags |= regex::literal; + if(f & REG_ICASE) + flags |= regex::icase; + if(f & REG_ESCAPE_IN_LISTS) + flags &= ~regex::no_escape_in_lists; + if(f & REG_NEWLINE_ALT) + flags |= regex::newline_alt; + + const char* p2; + if(f & REG_PEND) + p2 = expression->re_endp; + else p2 = ptr + std::strlen(ptr); + + int result; + +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + expression->re_magic = magic_value; + static_cast<c_regex_type*>(expression->guts)->set_expression(ptr, p2, flags); + expression->re_nsub = static_cast<c_regex_type*>(expression->guts)->mark_count() - 1; + result = static_cast<c_regex_type*>(expression->guts)->error_code(); +#ifndef BOOST_NO_EXCEPTIONS + } + catch(const boost::regex_error& be) + { + result = be.code(); + } + catch(...) + { + result = REG_E_UNKNOWN; + } +#endif + if(result) + regfreeA(expression); + return result; + +} + +BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int code, const regex_tA* e, char* buf, regsize_t buf_size) +{ + std::size_t result = 0; + if(code & REG_ITOA) + { + code &= ~REG_ITOA; + if(code <= (int)REG_E_UNKNOWN) + { + result = std::strlen(names[code]) + 1; + if(buf_size >= result) + re_detail::strcpy_s(buf, buf_size, names[code]); + return result; + } + return result; + } + if(code == REG_ATOI) + { + char localbuf[5]; + if(e == 0) + return 0; + for(int i = 0; i <= (int)REG_E_UNKNOWN; ++i) + { + if(std::strcmp(e->re_endp, names[i]) == 0) + { + // + // We're converting an integer i to a string, and since i <= REG_E_UNKNOWN + // a five character string is *always* large enough: + // +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE) + int r = (::sprintf_s)(localbuf, 5, "%d", i); +#else + int r = (std::sprintf)(localbuf, "%d", i); +#endif + if(r < 0) + return 0; // sprintf failed + if(std::strlen(localbuf) < buf_size) + re_detail::strcpy_s(buf, buf_size, localbuf); + return std::strlen(localbuf) + 1; + } + } +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE) + (::sprintf_s)(localbuf, 5, "%d", 0); +#else + (std::sprintf)(localbuf, "%d", 0); +#endif + if(std::strlen(localbuf) < buf_size) + re_detail::strcpy_s(buf, buf_size, localbuf); + return std::strlen(localbuf) + 1; + } + if(code <= (int)REG_E_UNKNOWN) + { + std::string p; + if((e) && (e->re_magic == magic_value)) + p = static_cast<c_regex_type*>(e->guts)->get_traits().error_string(static_cast< ::boost::regex_constants::error_type>(code)); + else + { + p = re_detail::get_default_error_string(static_cast< ::boost::regex_constants::error_type>(code)); + } + std::size_t len = p.size(); + if(len < buf_size) + { + re_detail::strcpy_s(buf, buf_size, p.c_str()); + } + return len + 1; + } + if(buf_size) + *buf = 0; + return 0; +} + +BOOST_REGEX_DECL int BOOST_REGEX_CCALL regexecA(const regex_tA* expression, const char* buf, regsize_t n, regmatch_t* array, int eflags) +{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4267) +#endif + bool result = false; + match_flag_type flags = match_default | expression->eflags; + const char* end; + const char* start; + cmatch m; + + if(eflags & REG_NOTBOL) + flags |= match_not_bol; + if(eflags & REG_NOTEOL) + flags |= match_not_eol; + if(eflags & REG_STARTEND) + { + start = buf + array[0].rm_so; + end = buf + array[0].rm_eo; + } + else + { + start = buf; + end = buf + std::strlen(buf); + } + +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + if(expression->re_magic == magic_value) + { + result = regex_search(start, end, m, *static_cast<c_regex_type*>(expression->guts), flags); + } + else + return result; +#ifndef BOOST_NO_EXCEPTIONS + } catch(...) + { + return REG_E_UNKNOWN; + } +#endif + + if(result) + { + // extract what matched: + std::size_t i; + for(i = 0; (i < n) && (i < expression->re_nsub + 1); ++i) + { + array[i].rm_so = (m[i].matched == false) ? -1 : (m[i].first - buf); + array[i].rm_eo = (m[i].matched == false) ? -1 : (m[i].second - buf); + } + // and set anything else to -1: + for(i = expression->re_nsub + 1; i < n; ++i) + { + array[i].rm_so = -1; + array[i].rm_eo = -1; + } + return 0; + } + return REG_NOMATCH; +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +} + +BOOST_REGEX_DECL void BOOST_REGEX_CCALL regfreeA(regex_tA* expression) +{ + if(expression->re_magic == magic_value) + { + delete static_cast<c_regex_type*>(expression->guts); + } + expression->re_magic = 0; +} + +} // namespace boost + + + + diff --git a/libs/regex/src/regex.cpp b/libs/regex/src/regex.cpp new file mode 100644 index 0000000000..27ac43cc09 --- /dev/null +++ b/libs/regex/src/regex.cpp @@ -0,0 +1,226 @@ +/* + * + * Copyright (c) 1998-2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: regex.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Misc boost::regbase member funnctions. + */ + + +#define BOOST_REGEX_SOURCE + +#include <new> +#include <boost/regex.hpp> +#include <boost/throw_exception.hpp> + +#if defined(BOOST_REGEX_HAS_MS_STACK_GUARD) && defined(_MSC_VER) && (_MSC_VER >= 1300) +# include <malloc.h> +#endif +#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD +#define WIN32_LEAN_AND_MEAN +#ifndef NOMINMAX +# define NOMINMAX +#endif +#define NOGDI +#define NOUSER +#include <windows.h> +#endif + +#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_REGEX_V3) +#if BOOST_REGEX_MAX_CACHE_BLOCKS == 0 +#include <new> +#else +#include <boost/regex/v4/mem_block_cache.hpp> +#endif +#endif + +#ifdef BOOST_INTEL +#pragma warning(disable:383) +#endif + +namespace boost{ + +// +// fix: these are declared out of line here to ensure +// that dll builds contain the Virtual table for these +// types - this ensures that exceptions can be thrown +// from the dll and caught in an exe. +regex_error::regex_error(const std::string& s, regex_constants::error_type err, std::ptrdiff_t pos) + : std::runtime_error(s) + , m_error_code(err) + , m_position(pos) +{ +} + +regex_error::regex_error(regex_constants::error_type err) + : std::runtime_error(::boost::re_detail::get_default_error_string(err)) + , m_error_code(err) + , m_position(0) +{ +} + +regex_error::~regex_error() throw() +{ +} + +void regex_error::raise()const +{ +#ifndef BOOST_NO_EXCEPTIONS + ::boost::throw_exception(*this); +#endif +} + + + +namespace re_detail{ + +BOOST_REGEX_DECL void BOOST_REGEX_CALL raise_runtime_error(const std::runtime_error& ex) +{ + ::boost::throw_exception(ex); +} +// +// error checking API: +// +BOOST_REGEX_DECL void BOOST_REGEX_CALL verify_options(boost::regex::flag_type /*ef*/, match_flag_type mf) +{ +#ifndef BOOST_REGEX_V3 + // + // can't mix match_extra with POSIX matching rules: + // + if((mf & match_extra) && (mf & match_posix)) + { + std::logic_error msg("Usage Error: Can't mix regular expression captures with POSIX matching rules"); + throw_exception(msg); + } +#endif +} + +#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD + +static void execute_eror() +{ + // we only get here after a stack overflow, + // this has to be a separate proceedure because we + // can't mix __try{}__except block with local objects + // that have destructors: + reset_stack_guard_page(); + std::runtime_error err("Out of stack space, while attempting to match a regular expression."); + raise_runtime_error(err); +} + +bool BOOST_REGEX_CALL abstract_protected_call::execute()const +{ + __try{ + return this->call(); + }__except(EXCEPTION_STACK_OVERFLOW == GetExceptionCode()) + { + execute_eror(); + } + // We never really get here at all: + return false; +} + +BOOST_REGEX_DECL void BOOST_REGEX_CALL reset_stack_guard_page() +{ +#if defined(BOOST_REGEX_HAS_MS_STACK_GUARD) && defined(_MSC_VER) && (_MSC_VER >= 1300) + _resetstkoflw(); +#else + // + // We need to locate the current page being used by the stack, + // move to the page below it and then deallocate and protect + // that page. Note that ideally we would protect only the lowest + // stack page that has been allocated: in practice there + // seems to be no easy way to locate this page, in any case as + // long as the next page is protected, then Windows will figure + // the rest out for us... + // + SYSTEM_INFO si; + GetSystemInfo(&si); + MEMORY_BASIC_INFORMATION mi; + DWORD previous_protection_status; + // + // this is an address in our stack space: + // + LPBYTE page = (LPBYTE)&page; + // + // Get the current memory page in use: + // + VirtualQuery(page, &mi, sizeof(mi)); + // + // Go to the page one below this: + // + page = (LPBYTE)(mi.BaseAddress)-si.dwPageSize; + // + // Free and protect everything from the start of the + // allocation range, to the end of the page below the + // one in use: + // + if (!VirtualFree(mi.AllocationBase, (LPBYTE)page - (LPBYTE)mi.AllocationBase, MEM_DECOMMIT) + || !VirtualProtect(page, si.dwPageSize, PAGE_GUARD | PAGE_READWRITE, &previous_protection_status)) + { + throw std::bad_exception(); + } +#endif +} +#endif + +#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_REGEX_V3) + +#if BOOST_REGEX_MAX_CACHE_BLOCKS == 0 + +BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block() +{ + return ::operator new(BOOST_REGEX_BLOCKSIZE); +} + +BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void* p) +{ + ::operator delete(p); +} + +#else + +#ifdef BOOST_HAS_THREADS +mem_block_cache block_cache = { 0, 0, BOOST_STATIC_MUTEX_INIT, }; +#else +mem_block_cache block_cache = { 0, 0, }; +#endif + +BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block() +{ + return block_cache.get(); +} + +BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void* p) +{ + block_cache.put(p); +} + +#endif + +#endif + +} // namespace re_detail + + + +} // namespace boost + +#if defined(BOOST_RE_USE_VCL) && defined(BOOST_REGEX_DYN_LINK) + +int WINAPI DllEntryPoint(HINSTANCE , unsigned long , void*) +{ + return 1; +} +#endif + diff --git a/libs/regex/src/regex_debug.cpp b/libs/regex/src/regex_debug.cpp new file mode 100644 index 0000000000..9306a82e7e --- /dev/null +++ b/libs/regex/src/regex_debug.cpp @@ -0,0 +1,59 @@ +/* + * + * Copyright (c) 1998-2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: regex_debug.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Misc. debugging helpers. + */ + + +#define BOOST_REGEX_SOURCE + +#include <boost/regex/config.hpp> + + +// +// regex configuration information: this prints out the settings used +// when the library was built - include in debugging builds only: +// +#ifdef BOOST_REGEX_CONFIG_INFO + +#define print_macro regex_lib_print_macro +#define print_expression regex_lib_print_expression +#define print_byte_order regex_lib_print_byte_order +#define print_sign regex_lib_print_sign +#define print_compiler_macros regex_lib_print_compiler_macros +#define print_stdlib_macros regex_lib_print_stdlib_macros +#define print_platform_macros regex_lib_print_platform_macros +#define print_boost_macros regex_lib_print_boost_macros +#define print_separator regex_lib_print_separator +#define OLD_MAIN regex_lib_main +#define NEW_MAIN regex_lib_main2 +#define NO_RECURSE + +#include <libs/regex/test/config_info/regex_config_info.cpp> + +BOOST_REGEX_DECL void BOOST_REGEX_CALL print_regex_library_info() +{ + std::cout << "\n\n"; + print_separator(); + std::cout << "Regex library build configuration:\n\n"; + regex_lib_main2(); +} + +#endif + + + + + diff --git a/libs/regex/src/regex_raw_buffer.cpp b/libs/regex/src/regex_raw_buffer.cpp new file mode 100644 index 0000000000..7a8de8033d --- /dev/null +++ b/libs/regex/src/regex_raw_buffer.cpp @@ -0,0 +1,70 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_raw_buffer.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Member functions for class raw_storage. + */ + + +#define BOOST_REGEX_SOURCE +#include <memory> +#include <cstring> +#include <boost/assert.hpp> +#include <boost/regex/v4/regex_raw_buffer.hpp> + +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std{ + using ::memcpy; + using ::memmove; +} +#endif + + +namespace boost{ namespace re_detail{ + +void BOOST_REGEX_CALL raw_storage::resize(size_type n) +{ + register size_type newsize = start ? last - start : 1024; + while(newsize < n) + newsize *= 2; + register size_type datasize = end - start; + // extend newsize to WORD/DWORD boundary: + newsize = (newsize + padding_mask) & ~(padding_mask); + + // allocate and copy data: + register pointer ptr = static_cast<pointer>(::operator new(newsize)); + BOOST_REGEX_NOEH_ASSERT(ptr) + std::memcpy(ptr, start, datasize); + + // get rid of old buffer: + ::operator delete(start); + + // and set up pointers: + start = ptr; + end = ptr + datasize; + last = ptr + newsize; +} + +void* BOOST_REGEX_CALL raw_storage::insert(size_type pos, size_type n) +{ + BOOST_ASSERT(pos <= size_type(end - start)); + if(size_type(last - end) < n) + resize(n + (end - start)); + register void* result = start + pos; + std::memmove(start + pos + n, start + pos, (end - start) - pos); + end += n; + return result; +} + +}} // namespaces diff --git a/libs/regex/src/regex_traits_defaults.cpp b/libs/regex/src/regex_traits_defaults.cpp new file mode 100644 index 0000000000..5f06149c3e --- /dev/null +++ b/libs/regex/src/regex_traits_defaults.cpp @@ -0,0 +1,692 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE regex_traits_defaults.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Declares API's for access to regex_traits default properties. + */ + +#define BOOST_REGEX_SOURCE +#include <boost/regex/regex_traits.hpp> + +#include <cctype> +#ifndef BOOST_NO_WREGEX +#include <cwctype> +#endif + +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std{ + using ::tolower; + using ::toupper; +#ifndef BOOST_NO_WREGEX + using ::towlower; + using ::towupper; +#endif +} +#endif + + +namespace boost{ namespace re_detail{ + +BOOST_REGEX_DECL const char* BOOST_REGEX_CALL get_default_syntax(regex_constants::syntax_type n) +{ + // if the user hasn't supplied a message catalog, then this supplies + // default "messages" for us to load in the range 1-100. + const char* messages[] = { + "", + "(", + ")", + "$", + "^", + ".", + "*", + "+", + "?", + "[", + "]", + "|", + "\\", + "#", + "-", + "{", + "}", + "0123456789", + "b", + "B", + "<", + ">", + "", + "", + "A`", + "z'", + "\n", + ",", + "a", + "f", + "n", + "r", + "t", + "v", + "x", + "c", + ":", + "=", + "e", + "", + "", + "", + "", + "", + "", + "", + "", + "E", + "Q", + "X", + "C", + "Z", + "G", + "!", + "p", + "P", + "N", + "gk", + "K", + "R", + }; + + return ((n >= (sizeof(messages) / sizeof(messages[1]))) ? "" : messages[n]); +} + +BOOST_REGEX_DECL const char* BOOST_REGEX_CALL get_default_error_string(regex_constants::error_type n) +{ + static const char* const s_default_error_messages[] = { + "Success", /* REG_NOERROR 0 error_ok */ + "No match", /* REG_NOMATCH 1 error_no_match */ + "Invalid regular expression.", /* REG_BADPAT 2 error_bad_pattern */ + "Invalid collation character.", /* REG_ECOLLATE 3 error_collate */ + "Invalid character class name, collating name, or character range.", /* REG_ECTYPE 4 error_ctype */ + "Invalid or unterminated escape sequence.", /* REG_EESCAPE 5 error_escape */ + "Invalid back reference: specified capturing group does not exist.", /* REG_ESUBREG 6 error_backref */ + "Unmatched [ or [^ in character class declaration.", /* REG_EBRACK 7 error_brack */ + "Unmatched marking parenthesis ( or \\(.", /* REG_EPAREN 8 error_paren */ + "Unmatched quantified repeat operator { or \\{.", /* REG_EBRACE 9 error_brace */ + "Invalid content of repeat range.", /* REG_BADBR 10 error_badbrace */ + "Invalid range end in character class", /* REG_ERANGE 11 error_range */ + "Out of memory.", /* REG_ESPACE 12 error_space NOT USED */ + "Invalid preceding regular expression prior to repetition operator.", /* REG_BADRPT 13 error_badrepeat */ + "Premature end of regular expression", /* REG_EEND 14 error_end NOT USED */ + "Regular expression is too large.", /* REG_ESIZE 15 error_size NOT USED */ + "Unmatched ) or \\)", /* REG_ERPAREN 16 error_right_paren NOT USED */ + "Empty regular expression.", /* REG_EMPTY 17 error_empty */ + "The complexity of matching the regular expression exceeded predefined bounds. " + "Try refactoring the regular expression to make each choice made by the state machine unambiguous. " + "This exception is thrown to prevent \"eternal\" matches that take an " + "indefinite period time to locate.", /* REG_ECOMPLEXITY 18 error_complexity */ + "Ran out of stack space trying to match the regular expression.", /* REG_ESTACK 19 error_stack */ + "Invalid or unterminated Perl (?...) sequence.", /* REG_E_PERL 20 error_perl */ + "Unknown error.", /* REG_E_UNKNOWN 21 error_unknown */ + }; + + return (n > ::boost::regex_constants::error_unknown) ? s_default_error_messages[ ::boost::regex_constants::error_unknown] : s_default_error_messages[n]; +} + +BOOST_REGEX_DECL bool BOOST_REGEX_CALL is_combining_implementation(boost::uint_least16_t c) +{ + const boost::uint_least16_t combining_ranges[] = { 0x0300, 0x0361, + 0x0483, 0x0486, + 0x0903, 0x0903, + 0x093E, 0x0940, + 0x0949, 0x094C, + 0x0982, 0x0983, + 0x09BE, 0x09C0, + 0x09C7, 0x09CC, + 0x09D7, 0x09D7, + 0x0A3E, 0x0A40, + 0x0A83, 0x0A83, + 0x0ABE, 0x0AC0, + 0x0AC9, 0x0ACC, + 0x0B02, 0x0B03, + 0x0B3E, 0x0B3E, + 0x0B40, 0x0B40, + 0x0B47, 0x0B4C, + 0x0B57, 0x0B57, + 0x0B83, 0x0B83, + 0x0BBE, 0x0BBF, + 0x0BC1, 0x0BCC, + 0x0BD7, 0x0BD7, + 0x0C01, 0x0C03, + 0x0C41, 0x0C44, + 0x0C82, 0x0C83, + 0x0CBE, 0x0CBE, + 0x0CC0, 0x0CC4, + 0x0CC7, 0x0CCB, + 0x0CD5, 0x0CD6, + 0x0D02, 0x0D03, + 0x0D3E, 0x0D40, + 0x0D46, 0x0D4C, + 0x0D57, 0x0D57, + 0x0F7F, 0x0F7F, + 0x20D0, 0x20E1, + 0x3099, 0x309A, + 0xFE20, 0xFE23, + 0xffff, 0xffff, }; + + const boost::uint_least16_t* p = combining_ranges + 1; + while(*p < c) p += 2; + --p; + if((c >= *p) && (c <= *(p+1))) + return true; + return false; +} + +// +// these are the POSIX collating names: +// +BOOST_REGEX_DECL const char* def_coll_names[] = { +"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "alert", "backspace", "tab", "newline", +"vertical-tab", "form-feed", "carriage-return", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", +"SYN", "ETB", "CAN", "EM", "SUB", "ESC", "IS4", "IS3", "IS2", "IS1", "space", "exclamation-mark", +"quotation-mark", "number-sign", "dollar-sign", "percent-sign", "ampersand", "apostrophe", +"left-parenthesis", "right-parenthesis", "asterisk", "plus-sign", "comma", "hyphen", +"period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", +"colon", "semicolon", "less-than-sign", "equals-sign", "greater-than-sign", +"question-mark", "commercial-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", "left-square-bracket", "backslash", +"right-square-bracket", "circumflex", "underscore", "grave-accent", "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", "left-curly-bracket", +"vertical-line", "right-curly-bracket", "tilde", "DEL", "", +}; + +// these multi-character collating elements +// should keep most Western-European locales +// happy - we should really localise these a +// little more - but this will have to do for +// now: + +BOOST_REGEX_DECL const char* def_multi_coll[] = { + "ae", + "Ae", + "AE", + "ch", + "Ch", + "CH", + "ll", + "Ll", + "LL", + "ss", + "Ss", + "SS", + "nj", + "Nj", + "NJ", + "dz", + "Dz", + "DZ", + "lj", + "Lj", + "LJ", + "", +}; + + + +BOOST_REGEX_DECL std::string BOOST_REGEX_CALL lookup_default_collate_name(const std::string& name) +{ + unsigned int i = 0; + while(*def_coll_names[i]) + { + if(def_coll_names[i] == name) + { + return std::string(1, char(i)); + } + ++i; + } + i = 0; + while(*def_multi_coll[i]) + { + if(def_multi_coll[i] == name) + { + return def_multi_coll[i]; + } + ++i; + } + return std::string(); +} + +BOOST_REGEX_DECL char BOOST_REGEX_CALL do_global_lower(char c) +{ + return static_cast<char>((std::tolower)((unsigned char)c)); +} + +BOOST_REGEX_DECL char BOOST_REGEX_CALL do_global_upper(char c) +{ + return static_cast<char>((std::toupper)((unsigned char)c)); +} +#ifndef BOOST_NO_WREGEX +BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL do_global_lower(wchar_t c) +{ + return (std::towlower)(c); +} + +BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL do_global_upper(wchar_t c) +{ + return (std::towupper)(c); +} +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL do_global_lower(unsigned short c) +{ + return (std::towlower)(c); +} + +BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL do_global_upper(unsigned short c) +{ + return (std::towupper)(c); +} +#endif + +#endif + +BOOST_REGEX_DECL regex_constants::escape_syntax_type BOOST_REGEX_CALL get_default_escape_syntax_type(char c) +{ + // + // char_syntax determines how the compiler treats a given character + // in a regular expression. + // + static regex_constants::escape_syntax_type char_syntax[] = { + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /* */ // 32 + regex_constants::escape_type_identity, /*!*/ + regex_constants::escape_type_identity, /*"*/ + regex_constants::escape_type_identity, /*#*/ + regex_constants::escape_type_identity, /*$*/ + regex_constants::escape_type_identity, /*%*/ + regex_constants::escape_type_identity, /*&*/ + regex_constants::escape_type_end_buffer, /*'*/ + regex_constants::syntax_open_mark, /*(*/ + regex_constants::syntax_close_mark, /*)*/ + regex_constants::escape_type_identity, /***/ + regex_constants::syntax_plus, /*+*/ + regex_constants::escape_type_identity, /*,*/ + regex_constants::escape_type_identity, /*-*/ + regex_constants::escape_type_identity, /*.*/ + regex_constants::escape_type_identity, /*/*/ + regex_constants::escape_type_decimal, /*0*/ + regex_constants::escape_type_backref, /*1*/ + regex_constants::escape_type_backref, /*2*/ + regex_constants::escape_type_backref, /*3*/ + regex_constants::escape_type_backref, /*4*/ + regex_constants::escape_type_backref, /*5*/ + regex_constants::escape_type_backref, /*6*/ + regex_constants::escape_type_backref, /*7*/ + regex_constants::escape_type_backref, /*8*/ + regex_constants::escape_type_backref, /*9*/ + regex_constants::escape_type_identity, /*:*/ + regex_constants::escape_type_identity, /*;*/ + regex_constants::escape_type_left_word, /*<*/ + regex_constants::escape_type_identity, /*=*/ + regex_constants::escape_type_right_word, /*>*/ + regex_constants::syntax_question, /*?*/ + regex_constants::escape_type_identity, /*@*/ + regex_constants::escape_type_start_buffer, /*A*/ + regex_constants::escape_type_not_word_assert, /*B*/ + regex_constants::escape_type_C, /*C*/ + regex_constants::escape_type_not_class, /*D*/ + regex_constants::escape_type_E, /*E*/ + regex_constants::escape_type_not_class, /*F*/ + regex_constants::escape_type_G, /*G*/ + regex_constants::escape_type_not_class, /*H*/ + regex_constants::escape_type_not_class, /*I*/ + regex_constants::escape_type_not_class, /*J*/ + regex_constants::escape_type_reset_start_mark, /*K*/ + regex_constants::escape_type_not_class, /*L*/ + regex_constants::escape_type_not_class, /*M*/ + regex_constants::escape_type_named_char, /*N*/ + regex_constants::escape_type_not_class, /*O*/ + regex_constants::escape_type_not_property, /*P*/ + regex_constants::escape_type_Q, /*Q*/ + regex_constants::escape_type_line_ending, /*R*/ + regex_constants::escape_type_not_class, /*S*/ + regex_constants::escape_type_not_class, /*T*/ + regex_constants::escape_type_not_class, /*U*/ + regex_constants::escape_type_not_class, /*V*/ + regex_constants::escape_type_not_class, /*W*/ + regex_constants::escape_type_X, /*X*/ + regex_constants::escape_type_not_class, /*Y*/ + regex_constants::escape_type_Z, /*Z*/ + regex_constants::escape_type_identity, /*[*/ + regex_constants::escape_type_identity, /*\*/ + regex_constants::escape_type_identity, /*]*/ + regex_constants::escape_type_identity, /*^*/ + regex_constants::escape_type_identity, /*_*/ + regex_constants::escape_type_start_buffer, /*`*/ + regex_constants::escape_type_control_a, /*a*/ + regex_constants::escape_type_word_assert, /*b*/ + regex_constants::escape_type_ascii_control, /*c*/ + regex_constants::escape_type_class, /*d*/ + regex_constants::escape_type_e, /*e*/ + regex_constants::escape_type_control_f, /*f*/ + regex_constants::escape_type_extended_backref, /*g*/ + regex_constants::escape_type_class, /*h*/ + regex_constants::escape_type_class, /*i*/ + regex_constants::escape_type_class, /*j*/ + regex_constants::escape_type_extended_backref, /*k*/ + regex_constants::escape_type_class, /*l*/ + regex_constants::escape_type_class, /*m*/ + regex_constants::escape_type_control_n, /*n*/ + regex_constants::escape_type_class, /*o*/ + regex_constants::escape_type_property, /*p*/ + regex_constants::escape_type_class, /*q*/ + regex_constants::escape_type_control_r, /*r*/ + regex_constants::escape_type_class, /*s*/ + regex_constants::escape_type_control_t, /*t*/ + regex_constants::escape_type_class, /*u*/ + regex_constants::escape_type_control_v, /*v*/ + regex_constants::escape_type_class, /*w*/ + regex_constants::escape_type_hex, /*x*/ + regex_constants::escape_type_class, /*y*/ + regex_constants::escape_type_end_buffer, /*z*/ + regex_constants::syntax_open_brace, /*{*/ + regex_constants::syntax_or, /*|*/ + regex_constants::syntax_close_brace, /*}*/ + regex_constants::escape_type_identity, /*~*/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + regex_constants::escape_type_identity, /**/ + }; + + return char_syntax[(unsigned char)c]; +} + +BOOST_REGEX_DECL regex_constants::syntax_type BOOST_REGEX_CALL get_default_syntax_type(char c) +{ + // + // char_syntax determines how the compiler treats a given character + // in a regular expression. + // + static regex_constants::syntax_type char_syntax[] = { + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_newline, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /* */ // 32 + regex_constants::syntax_not, /*!*/ + regex_constants::syntax_char, /*"*/ + regex_constants::syntax_hash, /*#*/ + regex_constants::syntax_dollar, /*$*/ + regex_constants::syntax_char, /*%*/ + regex_constants::syntax_char, /*&*/ + regex_constants::escape_type_end_buffer, /*'*/ + regex_constants::syntax_open_mark, /*(*/ + regex_constants::syntax_close_mark, /*)*/ + regex_constants::syntax_star, /***/ + regex_constants::syntax_plus, /*+*/ + regex_constants::syntax_comma, /*,*/ + regex_constants::syntax_dash, /*-*/ + regex_constants::syntax_dot, /*.*/ + regex_constants::syntax_char, /*/*/ + regex_constants::syntax_digit, /*0*/ + regex_constants::syntax_digit, /*1*/ + regex_constants::syntax_digit, /*2*/ + regex_constants::syntax_digit, /*3*/ + regex_constants::syntax_digit, /*4*/ + regex_constants::syntax_digit, /*5*/ + regex_constants::syntax_digit, /*6*/ + regex_constants::syntax_digit, /*7*/ + regex_constants::syntax_digit, /*8*/ + regex_constants::syntax_digit, /*9*/ + regex_constants::syntax_colon, /*:*/ + regex_constants::syntax_char, /*;*/ + regex_constants::escape_type_left_word, /*<*/ + regex_constants::syntax_equal, /*=*/ + regex_constants::escape_type_right_word, /*>*/ + regex_constants::syntax_question, /*?*/ + regex_constants::syntax_char, /*@*/ + regex_constants::syntax_char, /*A*/ + regex_constants::syntax_char, /*B*/ + regex_constants::syntax_char, /*C*/ + regex_constants::syntax_char, /*D*/ + regex_constants::syntax_char, /*E*/ + regex_constants::syntax_char, /*F*/ + regex_constants::syntax_char, /*G*/ + regex_constants::syntax_char, /*H*/ + regex_constants::syntax_char, /*I*/ + regex_constants::syntax_char, /*J*/ + regex_constants::syntax_char, /*K*/ + regex_constants::syntax_char, /*L*/ + regex_constants::syntax_char, /*M*/ + regex_constants::syntax_char, /*N*/ + regex_constants::syntax_char, /*O*/ + regex_constants::syntax_char, /*P*/ + regex_constants::syntax_char, /*Q*/ + regex_constants::syntax_char, /*R*/ + regex_constants::syntax_char, /*S*/ + regex_constants::syntax_char, /*T*/ + regex_constants::syntax_char, /*U*/ + regex_constants::syntax_char, /*V*/ + regex_constants::syntax_char, /*W*/ + regex_constants::syntax_char, /*X*/ + regex_constants::syntax_char, /*Y*/ + regex_constants::syntax_char, /*Z*/ + regex_constants::syntax_open_set, /*[*/ + regex_constants::syntax_escape, /*\*/ + regex_constants::syntax_close_set, /*]*/ + regex_constants::syntax_caret, /*^*/ + regex_constants::syntax_char, /*_*/ + regex_constants::syntax_char, /*`*/ + regex_constants::syntax_char, /*a*/ + regex_constants::syntax_char, /*b*/ + regex_constants::syntax_char, /*c*/ + regex_constants::syntax_char, /*d*/ + regex_constants::syntax_char, /*e*/ + regex_constants::syntax_char, /*f*/ + regex_constants::syntax_char, /*g*/ + regex_constants::syntax_char, /*h*/ + regex_constants::syntax_char, /*i*/ + regex_constants::syntax_char, /*j*/ + regex_constants::syntax_char, /*k*/ + regex_constants::syntax_char, /*l*/ + regex_constants::syntax_char, /*m*/ + regex_constants::syntax_char, /*n*/ + regex_constants::syntax_char, /*o*/ + regex_constants::syntax_char, /*p*/ + regex_constants::syntax_char, /*q*/ + regex_constants::syntax_char, /*r*/ + regex_constants::syntax_char, /*s*/ + regex_constants::syntax_char, /*t*/ + regex_constants::syntax_char, /*u*/ + regex_constants::syntax_char, /*v*/ + regex_constants::syntax_char, /*w*/ + regex_constants::syntax_char, /*x*/ + regex_constants::syntax_char, /*y*/ + regex_constants::syntax_char, /*z*/ + regex_constants::syntax_open_brace, /*{*/ + regex_constants::syntax_or, /*|*/ + regex_constants::syntax_close_brace, /*}*/ + regex_constants::syntax_char, /*~*/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + regex_constants::syntax_char, /**/ + }; + + return char_syntax[(unsigned char)c]; +} + + +} // re_detail +} // boost diff --git a/libs/regex/src/static_mutex.cpp b/libs/regex/src/static_mutex.cpp new file mode 100644 index 0000000000..d14feb1e9b --- /dev/null +++ b/libs/regex/src/static_mutex.cpp @@ -0,0 +1,179 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE static_mutex.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Declares static_mutex lock type. + */ + +#define BOOST_REGEX_SOURCE +#include <boost/config.hpp> + +#ifdef BOOST_HAS_THREADS + +#include <boost/regex/pending/static_mutex.hpp> + +#if defined(BOOST_HAS_WINTHREADS) +#ifndef NOMINMAX +# define NOMINMAX +#endif +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <boost/static_assert.hpp> +#endif + + +namespace boost{ + +#if defined(BOOST_HAS_PTHREADS) && defined(PTHREAD_MUTEX_INITIALIZER) + +scoped_static_mutex_lock::scoped_static_mutex_lock(static_mutex& m, bool lk) +: m_mutex(m), m_have_lock(false) +{ + if(lk) + lock(); +} + +scoped_static_mutex_lock::~scoped_static_mutex_lock() +{ + if(m_have_lock) + unlock(); +} + +void scoped_static_mutex_lock::lock() +{ + if(0 == m_have_lock) + { + pthread_mutex_lock(&(m_mutex.m_mutex)); + m_have_lock = true; + } +} + +void scoped_static_mutex_lock::unlock() +{ + if(m_have_lock) + { + pthread_mutex_unlock(&(m_mutex.m_mutex)); + m_have_lock = false; + } +} + +#elif defined(BOOST_HAS_WINTHREADS) + +BOOST_STATIC_ASSERT(sizeof(LONG) == sizeof(boost::int32_t)); + +scoped_static_mutex_lock::scoped_static_mutex_lock(static_mutex& m, bool lk) +: m_mutex(m), m_have_lock(false) +{ + if(lk) + lock(); +} + +scoped_static_mutex_lock::~scoped_static_mutex_lock() +{ + if(m_have_lock) + unlock(); +} + +void scoped_static_mutex_lock::lock() +{ + if(0 == m_have_lock) + { +#if !defined(InterlockedCompareExchangePointer) + while(0 != InterlockedCompareExchange(reinterpret_cast<void**>((boost::uint_least16_t*)&(m_mutex.m_mutex)), (void*)1, 0)) +#else + while(0 != InterlockedCompareExchange(reinterpret_cast<LONG*>(&(m_mutex.m_mutex)), 1, 0)) +#endif + { + Sleep(0); + } + m_have_lock = true; + } +} + +void scoped_static_mutex_lock::unlock() +{ + if(m_have_lock) + { +#if !defined(InterlockedCompareExchangePointer) + InterlockedExchange((LONG*)&(m_mutex.m_mutex), 0); +#else + InterlockedExchange(reinterpret_cast<LONG*>(&(m_mutex.m_mutex)), 0); +#endif + m_have_lock = false; + } +} + +#else +// +// Portable version of a static mutex based on Boost.Thread library: +// +#include <stdlib.h> +#include <boost/assert.hpp> + +boost::recursive_mutex* static_mutex::m_pmutex = 0; +boost::once_flag static_mutex::m_once = BOOST_ONCE_INIT; + +extern "C" BOOST_REGEX_DECL void boost_regex_free_static_mutex() +{ + delete static_mutex::m_pmutex; + static_mutex::m_pmutex = 0; +} + +void static_mutex::init() +{ + m_pmutex = new boost::recursive_mutex(); + int r = atexit(boost_regex_free_static_mutex); + BOOST_ASSERT(0 == r); +} + +scoped_static_mutex_lock::scoped_static_mutex_lock(static_mutex& , bool lk) +: m_plock(0), m_have_lock(false) +{ + if(lk) + lock(); +} + +scoped_static_mutex_lock::~scoped_static_mutex_lock() +{ + if(m_have_lock) + unlock(); + delete m_plock; +} + +void scoped_static_mutex_lock::lock() +{ + if(0 == m_have_lock) + { + boost::call_once(static_mutex::m_once,&static_mutex::init); + if(0 == m_plock) + m_plock = new boost::recursive_mutex::scoped_lock(*static_mutex::m_pmutex, boost::defer_lock); + m_plock->lock(); + m_have_lock = true; + } +} + +void scoped_static_mutex_lock::unlock() +{ + if(m_have_lock) + { + m_plock->unlock(); + m_have_lock = false; + } +} + +#endif + +} + +#endif // BOOST_HAS_THREADS diff --git a/libs/regex/src/usinstances.cpp b/libs/regex/src/usinstances.cpp new file mode 100644 index 0000000000..44ebd28dfb --- /dev/null +++ b/libs/regex/src/usinstances.cpp @@ -0,0 +1,81 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: winstances.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: regex unsigned short template instances (MSVC only). + */ + +#define BOOST_REGEX_SOURCE +#ifdef _MSC_VER +#pragma warning(disable:4506) // 'no definition for inline function' +#endif + +#include <boost/detail/workaround.hpp> +#include <memory> +#include <string> + +#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE) && defined(_NATIVE_WCHAR_T_DEFINED) \ + && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) || defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER))\ + && BOOST_WORKAROUND(BOOST_MSVC, <1600) +// +// This is a horrible workaround, but without declaring these symbols extern we get +// duplicate symbol errors when linking if the application is built without +// /Zc:wchar_t +// +#ifdef _CRTIMP2_PURE +# define BOOST_REGEX_STDLIB_DECL _CRTIMP2_PURE +#else +# define BOOST_REGEX_STDLIB_DECL _CRTIMP2 +#endif + +namespace std{ + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +template class BOOST_REGEX_STDLIB_DECL allocator<unsigned short>; +template class BOOST_REGEX_STDLIB_DECL _String_val<unsigned short, allocator<unsigned short> >; +template class BOOST_REGEX_STDLIB_DECL basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >; +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) +template<> BOOST_REGEX_STDLIB_DECL std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*); +#endif + +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&, + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const unsigned short *, + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&, + const unsigned short *); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator<( + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&, + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator>( + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&, + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&); +} +#endif + +#include <boost/regex/config.hpp> + +#if !defined(BOOST_NO_WREGEX) && defined(BOOST_REGEX_HAS_OTHER_WCHAR_T) && !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES) +#define BOOST_REGEX_US_INSTANTIATE + +#include <boost/regex.hpp> + +#endif + + diff --git a/libs/regex/src/w32_regex_traits.cpp b/libs/regex/src/w32_regex_traits.cpp new file mode 100644 index 0000000000..8c22214d3c --- /dev/null +++ b/libs/regex/src/w32_regex_traits.cpp @@ -0,0 +1,650 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE w32_regex_traits.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Implements w32_regex_traits<char> (and associated helper classes). + */ + +#define BOOST_REGEX_SOURCE +#include <boost/regex/config.hpp> + +#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) +#include <boost/regex/regex_traits.hpp> +#include <boost/regex/pattern_except.hpp> + +#define WIN32_LEAN_AND_MEAN +#ifndef NOMINMAX +# define NOMINMAX +#endif +#define NOGDI +#include <windows.h> + +#if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(UNDER_CE) +#pragma comment(lib, "user32.lib") +#endif + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::memset; +} +#endif + +namespace boost{ namespace re_detail{ + +#ifdef BOOST_NO_ANSI_APIS +UINT get_code_page_for_locale_id(lcid_type idx) +{ + WCHAR code_page_string[7]; + if (::GetLocaleInfoW(idx, LOCALE_IDEFAULTANSICODEPAGE, code_page_string, 7) == 0) + return 0; + + return static_cast<UINT>(_wtol(code_page_string)); +} +#endif + + +void w32_regex_traits_char_layer<char>::init() +{ + // we need to start by initialising our syntax map so we know which + // character is used for which purpose: + std::memset(m_char_map, 0, sizeof(m_char_map)); + cat_type cat; + std::string cat_name(w32_regex_traits<char>::get_catalog_name()); + if(cat_name.size()) + { + cat = ::boost::re_detail::w32_cat_open(cat_name); + if(!cat) + { + std::string m("Unable to open message catalog: "); + std::runtime_error err(m + cat_name); + ::boost::re_detail::raise_runtime_error(err); + } + } + // + // if we have a valid catalog then load our messages: + // + if(cat) + { + for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) + { + string_type mss = ::boost::re_detail::w32_cat_get(cat, this->m_locale, i, get_default_syntax(i)); + for(string_type::size_type j = 0; j < mss.size(); ++j) + { + m_char_map[static_cast<unsigned char>(mss[j])] = i; + } + } + } + else + { + for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) + { + const char* ptr = get_default_syntax(i); + while(ptr && *ptr) + { + m_char_map[static_cast<unsigned char>(*ptr)] = i; + ++ptr; + } + } + } + // + // finish off by calculating our escape types: + // + unsigned char i = 'A'; + do + { + if(m_char_map[i] == 0) + { + if(::boost::re_detail::w32_is(this->m_locale, 0x0002u, (char)i)) + m_char_map[i] = regex_constants::escape_type_class; + else if(::boost::re_detail::w32_is(this->m_locale, 0x0001u, (char)i)) + m_char_map[i] = regex_constants::escape_type_not_class; + } + }while(0xFF != i++); + + // + // fill in lower case map: + // + char char_map[1 << CHAR_BIT]; + for(int ii = 0; ii < (1 << CHAR_BIT); ++ii) + char_map[ii] = static_cast<char>(ii); +#ifndef BOOST_NO_ANSI_APIS + int r = ::LCMapStringA(this->m_locale, LCMAP_LOWERCASE, char_map, 1 << CHAR_BIT, this->m_lower_map, 1 << CHAR_BIT); + BOOST_ASSERT(r != 0); +#else + UINT code_page = get_code_page_for_locale_id(this->m_locale); + BOOST_ASSERT(code_page != 0); + + WCHAR wide_char_map[1 << CHAR_BIT]; + int conv_r = ::MultiByteToWideChar(code_page, 0, char_map, 1 << CHAR_BIT, wide_char_map, 1 << CHAR_BIT); + BOOST_ASSERT(conv_r != 0); + + WCHAR wide_lower_map[1 << CHAR_BIT]; + int r = ::LCMapStringW(this->m_locale, LCMAP_LOWERCASE, wide_char_map, 1 << CHAR_BIT, wide_lower_map, 1 << CHAR_BIT); + BOOST_ASSERT(r != 0); + + conv_r = ::WideCharToMultiByte(code_page, 0, wide_lower_map, r, this->m_lower_map, 1 << CHAR_BIT, NULL, NULL); + BOOST_ASSERT(conv_r != 0); +#endif + if(r < (1 << CHAR_BIT)) + { + // if we have multibyte characters then not all may have been given + // a lower case mapping: + for(int jj = r; jj < (1 << CHAR_BIT); ++jj) + this->m_lower_map[jj] = static_cast<char>(jj); + } + +#ifndef BOOST_NO_ANSI_APIS + r = ::GetStringTypeExA(this->m_locale, CT_CTYPE1, char_map, 1 << CHAR_BIT, this->m_type_map); +#else + r = ::GetStringTypeExW(this->m_locale, CT_CTYPE1, wide_char_map, 1 << CHAR_BIT, this->m_type_map); +#endif + BOOST_ASSERT(0 != r); +} + +BOOST_REGEX_DECL lcid_type BOOST_REGEX_CALL w32_get_default_locale() +{ + return ::GetUserDefaultLCID(); +} + +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(char c, lcid_type idx) +{ +#ifndef BOOST_NO_ANSI_APIS + WORD mask; + if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER)) + return true; + return false; +#else + UINT code_page = get_code_page_for_locale_id(idx); + if (code_page == 0) + return false; + + WCHAR wide_c; + if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) + return false; + + WORD mask; + if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_LOWER)) + return true; + return false; +#endif +} + +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(wchar_t c, lcid_type idx) +{ + WORD mask; + if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER)) + return true; + return false; +} +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(unsigned short ca, lcid_type idx) +{ + WORD mask; + wchar_t c = ca; + if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER)) + return true; + return false; +} +#endif + +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(char c, lcid_type idx) +{ +#ifndef BOOST_NO_ANSI_APIS + WORD mask; + if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER)) + return true; + return false; +#else + UINT code_page = get_code_page_for_locale_id(idx); + if (code_page == 0) + return false; + + WCHAR wide_c; + if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) + return false; + + WORD mask; + if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_UPPER)) + return true; + return false; +#endif +} + +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(wchar_t c, lcid_type idx) +{ + WORD mask; + if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER)) + return true; + return false; +} +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(unsigned short ca, lcid_type idx) +{ + WORD mask; + wchar_t c = ca; + if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER)) + return true; + return false; +} +#endif + +void free_module(void* mod) +{ + ::FreeLibrary(static_cast<HMODULE>(mod)); +} + +BOOST_REGEX_DECL cat_type BOOST_REGEX_CALL w32_cat_open(const std::string& name) +{ +#ifndef BOOST_NO_ANSI_APIS + cat_type result(::LoadLibraryA(name.c_str()), &free_module); + return result; +#else + LPWSTR wide_name = (LPWSTR)_alloca( (name.size() + 1) * sizeof(WCHAR) ); + if (::MultiByteToWideChar(CP_ACP, 0, name.c_str(), name.size(), wide_name, name.size() + 1) == 0) + return cat_type(); + + cat_type result(::LoadLibraryW(wide_name), &free_module); + return result; +#endif +} + +BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::string& def) +{ +#ifndef BOOST_NO_ANSI_APIS + char buf[256]; + if(0 == ::LoadStringA( + static_cast<HMODULE>(cat.get()), + i, + buf, + 256 + )) + { + return def; + } +#else + WCHAR wbuf[256]; + int r = ::LoadStringW( + static_cast<HMODULE>(cat.get()), + i, + wbuf, + 256 + ); + if (r == 0) + return def; + + LPSTR buf = (LPSTR)_alloca( (r + 1) * 2 ); + if (::WideCharToMultiByte(CP_ACP, 0, wbuf, r, buf, (r + 1) * 2, NULL, NULL) == 0) + return def; +#endif + return std::string(buf); +} + +#ifndef BOOST_NO_WREGEX +BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::wstring& def) +{ + wchar_t buf[256]; + if(0 == ::LoadStringW( + static_cast<HMODULE>(cat.get()), + i, + buf, + 256 + )) + { + return def; + } + return std::wstring(buf); +} +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::basic_string<unsigned short>& def) +{ + unsigned short buf[256]; + if(0 == ::LoadStringW( + static_cast<HMODULE>(cat.get()), + i, + (LPWSTR)buf, + 256 + )) + { + return def; + } + return std::basic_string<unsigned short>(buf); +} +#endif +#endif +BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type idx, const char* p1, const char* p2) +{ +#ifndef BOOST_NO_ANSI_APIS + int bytes = ::LCMapStringA( + idx, // locale identifier + LCMAP_SORTKEY, // mapping transformation type + p1, // source string + static_cast<int>(p2 - p1), // number of characters in source string + 0, // destination buffer + 0 // size of destination buffer + ); + if(!bytes) + return std::string(p1, p2); + std::string result(++bytes, '\0'); + bytes = ::LCMapStringA( + idx, // locale identifier + LCMAP_SORTKEY, // mapping transformation type + p1, // source string + static_cast<int>(p2 - p1), // number of characters in source string + &*result.begin(), // destination buffer + bytes // size of destination buffer + ); +#else + UINT code_page = get_code_page_for_locale_id(idx); + if(code_page == 0) + return std::string(p1, p2); + + int src_len = static_cast<int>(p2 - p1); + LPWSTR wide_p1 = (LPWSTR)_alloca( (src_len + 1) * 2 ); + if(::MultiByteToWideChar(code_page, 0, p1, src_len, wide_p1, src_len + 1) == 0) + return std::string(p1, p2); + + int bytes = ::LCMapStringW( + idx, // locale identifier + LCMAP_SORTKEY, // mapping transformation type + wide_p1, // source string + src_len, // number of characters in source string + 0, // destination buffer + 0 // size of destination buffer + ); + if(!bytes) + return std::string(p1, p2); + std::string result(++bytes, '\0'); + bytes = ::LCMapStringW( + idx, // locale identifier + LCMAP_SORTKEY, // mapping transformation type + wide_p1, // source string + src_len, // number of characters in source string + (LPWSTR)&*result.begin(), // destination buffer + bytes // size of destination buffer + ); +#endif + if(bytes > static_cast<int>(result.size())) + return std::string(p1, p2); + while(result.size() && result[result.size()-1] == '\0') + { + result.erase(result.size()-1); + } + return result; +} + +#ifndef BOOST_NO_WREGEX +BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type idx, const wchar_t* p1, const wchar_t* p2) +{ + int bytes = ::LCMapStringW( + idx, // locale identifier + LCMAP_SORTKEY, // mapping transformation type + p1, // source string + static_cast<int>(p2 - p1), // number of characters in source string + 0, // destination buffer + 0 // size of destination buffer + ); + if(!bytes) + return std::wstring(p1, p2); + std::string result(++bytes, '\0'); + bytes = ::LCMapStringW( + idx, // locale identifier + LCMAP_SORTKEY, // mapping transformation type + p1, // source string + static_cast<int>(p2 - p1), // number of characters in source string + reinterpret_cast<wchar_t*>(&*result.begin()), // destination buffer *of bytes* + bytes // size of destination buffer + ); + if(bytes > static_cast<int>(result.size())) + return std::wstring(p1, p2); + while(result.size() && result[result.size()-1] == L'\0') + { + result.erase(result.size()-1); + } + std::wstring r2; + for(std::string::size_type i = 0; i < result.size(); ++i) + r2.append(1, static_cast<wchar_t>(static_cast<unsigned char>(result[i]))); + return r2; +} +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transform(lcid_type idx, const unsigned short* p1, const unsigned short* p2) +{ + int bytes = ::LCMapStringW( + idx, // locale identifier + LCMAP_SORTKEY, // mapping transformation type + (LPCWSTR)p1, // source string + static_cast<int>(p2 - p1), // number of characters in source string + 0, // destination buffer + 0 // size of destination buffer + ); + if(!bytes) + return std::basic_string<unsigned short>(p1, p2); + std::string result(++bytes, '\0'); + bytes = ::LCMapStringW( + idx, // locale identifier + LCMAP_SORTKEY, // mapping transformation type + (LPCWSTR)p1, // source string + static_cast<int>(p2 - p1), // number of characters in source string + reinterpret_cast<wchar_t*>(&*result.begin()), // destination buffer *of bytes* + bytes // size of destination buffer + ); + if(bytes > static_cast<int>(result.size())) + return std::basic_string<unsigned short>(p1, p2); + while(result.size() && result[result.size()-1] == L'\0') + { + result.erase(result.size()-1); + } + std::basic_string<unsigned short> r2; + for(std::string::size_type i = 0; i < result.size(); ++i) + r2.append(1, static_cast<unsigned short>(static_cast<unsigned char>(result[i]))); + return r2; +} +#endif +#endif +BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type idx) +{ + char result[2]; +#ifndef BOOST_NO_ANSI_APIS + int b = ::LCMapStringA( + idx, // locale identifier + LCMAP_LOWERCASE, // mapping transformation type + &c, // source string + 1, // number of characters in source string + result, // destination buffer + 1); // size of destination buffer + if(b == 0) + return c; +#else + UINT code_page = get_code_page_for_locale_id(idx); + if (code_page == 0) + return c; + + WCHAR wide_c; + if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) + return c; + + WCHAR wide_result; + int b = ::LCMapStringW( + idx, // locale identifier + LCMAP_LOWERCASE, // mapping transformation type + &wide_c, // source string + 1, // number of characters in source string + &wide_result, // destination buffer + 1); // size of destination buffer + if(b == 0) + return c; + + if (::WideCharToMultiByte(code_page, 0, &wide_result, 1, result, 2, NULL, NULL) == 0) + return c; +#endif + return result[0]; +} + +#ifndef BOOST_NO_WREGEX +BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type idx) +{ + wchar_t result[2]; + int b = ::LCMapStringW( + idx, // locale identifier + LCMAP_LOWERCASE, // mapping transformation type + &c, // source string + 1, // number of characters in source string + result, // destination buffer + 1); // size of destination buffer + if(b == 0) + return c; + return result[0]; +} +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_tolower(unsigned short c, lcid_type idx) +{ + wchar_t result[2]; + int b = ::LCMapStringW( + idx, // locale identifier + LCMAP_LOWERCASE, // mapping transformation type + (wchar_t const*)&c, // source string + 1, // number of characters in source string + result, // destination buffer + 1); // size of destination buffer + if(b == 0) + return c; + return result[0]; +} +#endif +#endif +BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type idx) +{ + char result[2]; +#ifndef BOOST_NO_ANSI_APIS + int b = ::LCMapStringA( + idx, // locale identifier + LCMAP_UPPERCASE, // mapping transformation type + &c, // source string + 1, // number of characters in source string + result, // destination buffer + 1); // size of destination buffer + if(b == 0) + return c; +#else + UINT code_page = get_code_page_for_locale_id(idx); + if(code_page == 0) + return c; + + WCHAR wide_c; + if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) + return c; + + WCHAR wide_result; + int b = ::LCMapStringW( + idx, // locale identifier + LCMAP_UPPERCASE, // mapping transformation type + &wide_c, // source string + 1, // number of characters in source string + &wide_result, // destination buffer + 1); // size of destination buffer + if(b == 0) + return c; + + if (::WideCharToMultiByte(code_page, 0, &wide_result, 1, result, 2, NULL, NULL) == 0) + return c; +#endif + return result[0]; +} + +#ifndef BOOST_NO_WREGEX +BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_toupper(wchar_t c, lcid_type idx) +{ + wchar_t result[2]; + int b = ::LCMapStringW( + idx, // locale identifier + LCMAP_UPPERCASE, // mapping transformation type + &c, // source string + 1, // number of characters in source string + result, // destination buffer + 1); // size of destination buffer + if(b == 0) + return c; + return result[0]; +} +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_toupper(unsigned short c, lcid_type idx) +{ + wchar_t result[2]; + int b = ::LCMapStringW( + idx, // locale identifier + LCMAP_UPPERCASE, // mapping transformation type + (wchar_t const*)&c, // source string + 1, // number of characters in source string + result, // destination buffer + 1); // size of destination buffer + if(b == 0) + return c; + return result[0]; +} +#endif +#endif +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m, char c) +{ + WORD mask; +#ifndef BOOST_NO_ANSI_APIS + if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base)) + return true; +#else + UINT code_page = get_code_page_for_locale_id(idx); + if(code_page == 0) + return false; + + WCHAR wide_c; + if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) + return false; + + if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base)) + return true; +#endif + if((m & w32_regex_traits_implementation<char>::mask_word) && (c == '_')) + return true; + return false; +} + +#ifndef BOOST_NO_WREGEX +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m, wchar_t c) +{ + WORD mask; + if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base)) + return true; + if((m & w32_regex_traits_implementation<wchar_t>::mask_word) && (c == '_')) + return true; + if((m & w32_regex_traits_implementation<wchar_t>::mask_unicode) && (c > 0xff)) + return true; + return false; +} +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m, unsigned short c) +{ + WORD mask; + if(::GetStringTypeExW(idx, CT_CTYPE1, (wchar_t const*)&c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base)) + return true; + if((m & w32_regex_traits_implementation<wchar_t>::mask_word) && (c == '_')) + return true; + if((m & w32_regex_traits_implementation<wchar_t>::mask_unicode) && (c > 0xff)) + return true; + return false; +} +#endif +#endif + +} // re_detail +} // boost + +#endif + diff --git a/libs/regex/src/wc_regex_traits.cpp b/libs/regex/src/wc_regex_traits.cpp new file mode 100644 index 0000000000..b3d2c5a2c7 --- /dev/null +++ b/libs/regex/src/wc_regex_traits.cpp @@ -0,0 +1,301 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: wc_regex_traits.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Implements out of line members for c_regex_traits<wchar_t> + */ + + +#define BOOST_REGEX_SOURCE + +#include <boost/detail/workaround.hpp> +#include <memory> +#include <string> +#include "internals.hpp" + +#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE) && defined(_NATIVE_WCHAR_T_DEFINED) \ + && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) || defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER))\ + && BOOST_WORKAROUND(BOOST_MSVC, <1600) +// +// This is a horrible workaround, but without declaring these symbols extern we get +// duplicate symbol errors when linking if the application is built without +// /Zc:wchar_t +// +#ifdef _CRTIMP2_PURE +# define BOOST_REGEX_STDLIB_DECL _CRTIMP2_PURE +#else +# define BOOST_REGEX_STDLIB_DECL _CRTIMP2 +#endif + +namespace std{ + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +template class BOOST_REGEX_STDLIB_DECL allocator<unsigned short>; +template class BOOST_REGEX_STDLIB_DECL _String_val<unsigned short, allocator<unsigned short> >; +template class BOOST_REGEX_STDLIB_DECL basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >; +#endif + +#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) +template<> BOOST_REGEX_STDLIB_DECL std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*); +#endif + +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&, + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const unsigned short *, + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&, + const unsigned short *); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator<( + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&, + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator>( + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&, + const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&); +} +#endif + +#include <boost/regex/config.hpp> +#include <boost/detail/workaround.hpp> + +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) + +#include <boost/regex/v4/c_regex_traits.hpp> +#ifndef BOOST_NO_WREGEX +#include <boost/regex/v4/primary_transform.hpp> +#include <boost/regex/v4/regex_traits_defaults.hpp> + +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std{ + using ::wcstol; +} +#endif + +namespace boost{ + +c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::transform(const wchar_t* p1, const wchar_t* p2) +{ + std::size_t r; + std::size_t s = 10; + std::wstring src(p1, p2); + std::wstring result(s, L' '); + while(s < (r = std::wcsxfrm(&*result.begin(), src.c_str(), s))) + { + result.append(r - s + 3, L' '); + s = result.size(); + } + result.erase(r); + return result; +} + +c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::transform_primary(const wchar_t* p1, const wchar_t* p2) +{ + static wchar_t s_delim; + static const int s_collate_type = ::boost::re_detail::find_sort_syntax(static_cast<const c_regex_traits<wchar_t>*>(0), &s_delim); + std::wstring result; + // + // What we do here depends upon the format of the sort key returned by + // sort key returned by this->transform: + // + switch(s_collate_type) + { + case ::boost::re_detail::sort_C: + case ::boost::re_detail::sort_unknown: + // the best we can do is translate to lower case, then get a regular sort key: + { + result.assign(p1, p2); + for(std::wstring::size_type i = 0; i < result.size(); ++i) + result[i] = (std::towlower)(result[i]); + result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size()); + break; + } + case ::boost::re_detail::sort_fixed: + { + // get a regular sort key, and then truncate it: + result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size()); + result.erase(s_delim); + break; + } + case ::boost::re_detail::sort_delim: + // get a regular sort key, and then truncate everything after the delim: + result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size()); + if(result.size() && (result[0] == s_delim)) + break; + std::size_t i; + for(i = 0; i < result.size(); ++i) + { + if(result[i] == s_delim) + break; + } + result.erase(i); + break; + } + if(result.empty()) + result = std::wstring(1, char(0)); + return result; +} + +c_regex_traits<wchar_t>::char_class_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::lookup_classname(const wchar_t* p1, const wchar_t* p2) +{ + static const char_class_type masks[] = + { + 0, + char_class_alnum, + char_class_alpha, + char_class_blank, + char_class_cntrl, + char_class_digit, + char_class_digit, + char_class_graph, + char_class_horizontal, + char_class_lower, + char_class_lower, + char_class_print, + char_class_punct, + char_class_space, + char_class_space, + char_class_upper, + char_class_unicode, + char_class_upper, + char_class_vertical, + char_class_alnum | char_class_word, + char_class_alnum | char_class_word, + char_class_xdigit, + }; + + int idx = ::boost::re_detail::get_default_class_id(p1, p2); + if(idx < 0) + { + std::wstring s(p1, p2); + for(std::wstring::size_type i = 0; i < s.size(); ++i) + s[i] = (std::towlower)(s[i]); + idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size()); + } + BOOST_ASSERT(idx+1 < static_cast<int>(sizeof(masks) / sizeof(masks[0]))); + return masks[idx+1]; +} + +bool BOOST_REGEX_CALL c_regex_traits<wchar_t>::isctype(wchar_t c, char_class_type mask) +{ + return + ((mask & char_class_space) && (std::iswspace)(c)) + || ((mask & char_class_print) && (std::iswprint)(c)) + || ((mask & char_class_cntrl) && (std::iswcntrl)(c)) + || ((mask & char_class_upper) && (std::iswupper)(c)) + || ((mask & char_class_lower) && (std::iswlower)(c)) + || ((mask & char_class_alpha) && (std::iswalpha)(c)) + || ((mask & char_class_digit) && (std::iswdigit)(c)) + || ((mask & char_class_punct) && (std::iswpunct)(c)) + || ((mask & char_class_xdigit) && (std::iswxdigit)(c)) + || ((mask & char_class_blank) && (std::iswspace)(c) && !::boost::re_detail::is_separator(c)) + || ((mask & char_class_word) && (c == '_')) + || ((mask & char_class_unicode) && (c & ~static_cast<wchar_t>(0xff))) + || ((mask & char_class_vertical) && (::boost::re_detail::is_separator(c) || (c == L'\v'))) + || ((mask & char_class_horizontal) && (std::iswspace)(c) && !::boost::re_detail::is_separator(c) && (c != L'\v')); +} + +c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::lookup_collatename(const wchar_t* p1, const wchar_t* p2) +{ +#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\ + && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\ + && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551) + std::string name(p1, p2); +#else + std::string name; + const wchar_t* p0 = p1; + while(p0 != p2) + name.append(1, char(*p0++)); +#endif + name = ::boost::re_detail::lookup_default_collate_name(name); +#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\ + && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\ + && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551) + if(name.size()) + return string_type(name.begin(), name.end()); +#else + if(name.size()) + { + string_type result; + typedef std::string::const_iterator iter; + iter b = name.begin(); + iter e = name.end(); + while(b != e) + result.append(1, wchar_t(*b++)); + return result; + } +#endif + if(p2 - p1 == 1) + return string_type(1, *p1); + return string_type(); +} + +int BOOST_REGEX_CALL c_regex_traits<wchar_t>::value(wchar_t c, int radix) +{ +#ifdef __BORLANDC__ + // workaround for broken wcstol: + if((std::iswxdigit)(c) == 0) + return -1; +#endif + wchar_t b[2] = { c, '\0', }; + wchar_t* ep; + int result = std::wcstol(b, &ep, radix); + if(ep == b) + return -1; + return result; +} + +#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T +c_regex_traits<unsigned short>::string_type BOOST_REGEX_CALL c_regex_traits<unsigned short>::transform(const unsigned short* p1, const unsigned short* p2) +{ + std::wstring result = c_regex_traits<wchar_t>::transform((const wchar_t*)p1, (const wchar_t*)p2); + return string_type(result.begin(), result.end()); +} + +c_regex_traits<unsigned short>::string_type BOOST_REGEX_CALL c_regex_traits<unsigned short>::transform_primary(const unsigned short* p1, const unsigned short* p2) +{ + std::wstring result = c_regex_traits<wchar_t>::transform_primary((const wchar_t*)p1, (const wchar_t*)p2); + return string_type(result.begin(), result.end()); +} + +c_regex_traits<unsigned short>::char_class_type BOOST_REGEX_CALL c_regex_traits<unsigned short>::lookup_classname(const unsigned short* p1, const unsigned short* p2) +{ + return c_regex_traits<wchar_t>::lookup_classname((const wchar_t*)p1, (const wchar_t*)p2); +} + +c_regex_traits<unsigned short>::string_type BOOST_REGEX_CALL c_regex_traits<unsigned short>::lookup_collatename(const unsigned short* p1, const unsigned short* p2) +{ + std::wstring result = c_regex_traits<wchar_t>::lookup_collatename((const wchar_t*)p1, (const wchar_t*)p2); + return string_type(result.begin(), result.end()); +} + +bool BOOST_REGEX_CALL c_regex_traits<unsigned short>::isctype(unsigned short c, char_class_type m) +{ + return c_regex_traits<wchar_t>::isctype(c, m); +} + +int BOOST_REGEX_CALL c_regex_traits<unsigned short>::value(unsigned short c, int radix) +{ + return c_regex_traits<wchar_t>::value(c, radix); +} + +#endif + +} + +#endif // BOOST_NO_WREGEX + +#endif // __BORLANDC__ + diff --git a/libs/regex/src/wide_posix_api.cpp b/libs/regex/src/wide_posix_api.cpp new file mode 100644 index 0000000000..ff5c90d89a --- /dev/null +++ b/libs/regex/src/wide_posix_api.cpp @@ -0,0 +1,315 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: wide_posix_api.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Implements the wide character POSIX API wrappers. + */ + +#define BOOST_REGEX_SOURCE + +#include <boost/regex/config.hpp> + +#ifndef BOOST_NO_WREGEX + +#include <boost/regex.hpp> +#include <boost/cregex.hpp> + +#include <cwchar> +#include <cstring> +#include <cstdio> + +#ifdef BOOST_INTEL +#pragma warning(disable:981) +#endif + +#if defined(BOOST_NO_STDC_NAMESPACE) || defined(__NetBSD__) +namespace std{ +# ifndef BOOST_NO_SWPRINTF + using ::swprintf; +# endif +} +#endif + + +namespace boost{ + +namespace { + +unsigned int wmagic_value = 28631; + +const wchar_t* wnames[] = { + L"REG_NOERROR", + L"REG_NOMATCH", + L"REG_BADPAT", + L"REG_ECOLLATE", + L"REG_ECTYPE", + L"REG_EESCAPE", + L"REG_ESUBREG", + L"REG_EBRACK", + L"REG_EPAREN", + L"REG_EBRACE", + L"REG_BADBR", + L"REG_ERANGE", + L"REG_ESPACE", + L"REG_BADRPT", + L"REG_EEND", + L"REG_ESIZE", + L"REG_ERPAREN", + L"REG_EMPTY", + L"REG_ECOMPLEXITY", + L"REG_ESTACK", + L"REG_E_PERL", + L"REG_E_UNKNOWN", +}; +} + +typedef boost::basic_regex<wchar_t, c_regex_traits<wchar_t> > wc_regex_type; + +BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompW(regex_tW* expression, const wchar_t* ptr, int f) +{ + if(expression->re_magic != wmagic_value) + { + expression->guts = 0; +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + expression->guts = new wc_regex_type(); +#ifndef BOOST_NO_EXCEPTIONS + } catch(...) + { + return REG_ESPACE; + } +#else + if(0 == expression->guts) + return REG_E_MEMORY; +#endif + } + // set default flags: + boost::uint_fast32_t flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? wregex::extended : wregex::basic); + expression->eflags = (f & REG_NEWLINE) ? match_not_dot_newline : match_default; + + // and translate those that are actually set: + if(f & REG_NOCOLLATE) + { + flags |= wregex::nocollate; +#ifndef BOOST_REGEX_V3 + flags &= ~wregex::collate; +#endif + } + + if(f & REG_NOSUB) + { + //expression->eflags |= match_any; + flags |= wregex::nosubs; + } + + if(f & REG_NOSPEC) + flags |= wregex::literal; + if(f & REG_ICASE) + flags |= wregex::icase; + if(f & REG_ESCAPE_IN_LISTS) + flags &= ~wregex::no_escape_in_lists; + if(f & REG_NEWLINE_ALT) + flags |= wregex::newline_alt; + + const wchar_t* p2; + if(f & REG_PEND) + p2 = expression->re_endp; + else p2 = ptr + std::wcslen(ptr); + + int result; + +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + expression->re_magic = wmagic_value; + static_cast<wc_regex_type*>(expression->guts)->set_expression(ptr, p2, flags); + expression->re_nsub = static_cast<wc_regex_type*>(expression->guts)->mark_count() - 1; + result = static_cast<wc_regex_type*>(expression->guts)->error_code(); +#ifndef BOOST_NO_EXCEPTIONS + } + catch(const boost::regex_error& be) + { + result = be.code(); + } + catch(...) + { + result = REG_E_UNKNOWN; + } +#endif + if(result) + regfreeW(expression); + return result; + +} + +BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorW(int code, const regex_tW* e, wchar_t* buf, regsize_t buf_size) +{ + std::size_t result = 0; + if(code & REG_ITOA) + { + code &= ~REG_ITOA; + if((code <= (int)REG_E_UNKNOWN) && (code >= 0)) + { + result = std::wcslen(wnames[code]) + 1; + if(buf_size >= result) +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE) + ::wcscpy_s(buf, buf_size, wnames[code]); +#else + std::wcscpy(buf, wnames[code]); +#endif + return result; + } + return result; + } +#if !defined(BOOST_NO_SWPRINTF) + if(code == REG_ATOI) + { + wchar_t localbuf[5]; + if(e == 0) + return 0; + for(int i = 0; i <= (int)REG_E_UNKNOWN; ++i) + { + if(std::wcscmp(e->re_endp, wnames[i]) == 0) + { +#if defined(_WIN32_WCE) && !defined(UNDER_CE) + (std::swprintf)(localbuf, L"%d", i); +#else + (std::swprintf)(localbuf, 5, L"%d", i); +#endif + if(std::wcslen(localbuf) < buf_size) +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE) + ::wcscpy_s(buf, buf_size, localbuf); +#else + std::wcscpy(buf, localbuf); +#endif + return std::wcslen(localbuf) + 1; + } + } +#if defined(_WIN32_WCE) && !defined(UNDER_CE) + (std::swprintf)(localbuf, L"%d", 0); +#else + (std::swprintf)(localbuf, 5, L"%d", 0); +#endif + if(std::wcslen(localbuf) < buf_size) +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE) + ::wcscpy_s(buf, buf_size, localbuf); +#else + std::wcscpy(buf, localbuf); +#endif + return std::wcslen(localbuf) + 1; + } +#endif + if(code <= (int)REG_E_UNKNOWN) + { + std::string p; + if((e) && (e->re_magic == wmagic_value)) + p = static_cast<wc_regex_type*>(e->guts)->get_traits().error_string(static_cast< ::boost::regex_constants::error_type>(code)); + else + { + p = re_detail::get_default_error_string(static_cast< ::boost::regex_constants::error_type>(code)); + } + std::size_t len = p.size(); + if(len < buf_size) + { + re_detail::copy(p.c_str(), p.c_str() + p.size() + 1, buf); + } + return len + 1; + } + if(buf_size) + *buf = 0; + return 0; +} + +BOOST_REGEX_DECL int BOOST_REGEX_CCALL regexecW(const regex_tW* expression, const wchar_t* buf, regsize_t n, regmatch_t* array, int eflags) +{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4267) +#endif + bool result = false; + match_flag_type flags = match_default | expression->eflags; + const wchar_t* end; + const wchar_t* start; + wcmatch m; + + if(eflags & REG_NOTBOL) + flags |= match_not_bol; + if(eflags & REG_NOTEOL) + flags |= match_not_eol; + if(eflags & REG_STARTEND) + { + start = buf + array[0].rm_so; + end = buf + array[0].rm_eo; + } + else + { + start = buf; + end = buf + std::wcslen(buf); + } + +#ifndef BOOST_NO_EXCEPTIONS + try{ +#endif + if(expression->re_magic == wmagic_value) + { + result = regex_search(start, end, m, *static_cast<wc_regex_type*>(expression->guts), flags); + } + else + return result; +#ifndef BOOST_NO_EXCEPTIONS + } catch(...) + { + return REG_E_UNKNOWN; + } +#endif + if(result) + { + // extract what matched: + std::size_t i; + for(i = 0; (i < n) && (i < expression->re_nsub + 1); ++i) + { + array[i].rm_so = (m[i].matched == false) ? -1 : (m[i].first - buf); + array[i].rm_eo = (m[i].matched == false) ? -1 : (m[i].second - buf); + } + // and set anything else to -1: + for(i = expression->re_nsub + 1; i < n; ++i) + { + array[i].rm_so = -1; + array[i].rm_eo = -1; + } + return 0; + } + return REG_NOMATCH; +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +} + +BOOST_REGEX_DECL void BOOST_REGEX_CCALL regfreeW(regex_tW* expression) +{ + if(expression->re_magic == wmagic_value) + { + delete static_cast<wc_regex_type*>(expression->guts); + } + expression->re_magic = 0; +} + +} // namespace boost; + +#endif + + + + diff --git a/libs/regex/src/winstances.cpp b/libs/regex/src/winstances.cpp new file mode 100644 index 0000000000..1e0b859628 --- /dev/null +++ b/libs/regex/src/winstances.cpp @@ -0,0 +1,35 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: winstances.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: regex wide character template instances. + */ + +#define BOOST_REGEX_SOURCE + +#include <boost/regex/config.hpp> + +#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES) +#define BOOST_REGEX_WIDE_INSTANTIATE + +#ifdef __BORLANDC__ +#pragma hrdstop +#endif + +#include <boost/regex.hpp> + +#endif + + + diff --git a/libs/regex/test/Jamfile.v2 b/libs/regex/test/Jamfile.v2 new file mode 100644 index 0000000000..a7b689f714 --- /dev/null +++ b/libs/regex/test/Jamfile.v2 @@ -0,0 +1,196 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +project + : requirements + <threading>multi + <link>shared:<define>BOOST_REGEX_DYN_LINK=1 + <toolset>msvc-7.1:<define>TEST_MFC=1 + <toolset>msvc-7.0:<define>TEST_MFC=1 + <toolset>msvc:<asynch-exceptions>on + # There are unidentified linker problems on these platforms: + <toolset>mipspro-7.4:<link>static + <toolset>sun-5.9:<link>static + <warnings>all + <toolset>gcc:<cxxflags>-Wextra + <toolset>gcc:<cxxflags>-Wshadow + <define>U_USING_ICU_NAMESPACE=0 + #<toolset>gcc-mw:<link>static + #<toolset>gcc-mingw:<link>static + <toolset>gcc-cygwin:<link>static + ; + +# +# rule for simple regex test programs: +# +rule regex-test ( name : sources + : requirements * : input-files * ) +{ + return [ run $(sources) ../build//boost_regex + : + : $(input-files) + : $(requirements) + : $(name) ] ; +} + +R_SOURCE = +basic_tests.cpp +main.cpp +test_alt.cpp +test_anchors.cpp +test_asserts.cpp +test_backrefs.cpp +test_deprecated.cpp +test_emacs.cpp +test_escapes.cpp +test_grep.cpp +test_locale.cpp +test_mfc.cpp +test_non_greedy_repeats.cpp +test_perl_ex.cpp +test_replace.cpp +test_sets.cpp +test_simple_repeats.cpp +test_tricky_cases.cpp +test_icu.cpp +test_unicode.cpp +test_overloads.cpp +test_operators.cpp +; + +lib boost_regex_recursive : + ../src/c_regex_traits.cpp + ../src/cpp_regex_traits.cpp + ../src/cregex.cpp + ../src/fileiter.cpp + ../src/icu.cpp + ../src/instances.cpp + ../src/posix_api.cpp + ../src/regex.cpp + ../src/regex_debug.cpp + ../src/regex_raw_buffer.cpp + ../src/regex_traits_defaults.cpp + ../src/static_mutex.cpp + ../src/w32_regex_traits.cpp + ../src/wc_regex_traits.cpp + ../src/wide_posix_api.cpp + ../src/winstances.cpp + ../src/usinstances.cpp + ../build//icu_options + : + <define>BOOST_REGEX_RECURSIVE=1 + <link>shared:<define>BOOST_REGEX_DYN_LINK=1 + : + ; + +local regress-sources = regress/$(R_SOURCE) ; + +test-suite regex + : + [ run regress/$(R_SOURCE) ../build//boost_regex ../build//icu_options + : # command line + : # input files + : # requirements + : regex_regress ] + + [ run regress/$(R_SOURCE) ../build//boost_regex + ../../thread/build//boost_thread ../build//icu_options + : # command line + : # input files + : # requirements + <define>TEST_THREADS + : regex_regress_threaded ] + + [ regex-test posix_api_check : c_compiler_checks/posix_api_check.c ] + + [ compile c_compiler_checks/wide_posix_api_check.c + : : wide_posix_api_check_c ] + + [ regex-test posix_api_check_cpp : c_compiler_checks/posix_api_check.cpp ] + + [ regex-test wide_posix_api_check_cpp + : c_compiler_checks/wide_posix_api_check.cpp ] + + [ run pathology/bad_expression_test.cpp + ../build//boost_regex + ] + + [ run pathology/recursion_test.cpp + ../build//boost_regex + ] + + [ run named_subexpressions/named_subexpressions_test.cpp + ../build//boost_regex + ] + + [ run unicode/unicode_iterator_test.cpp ../build//boost_regex : : : <define>TEST_UTF8 : unicode_iterator_test_utf8 ] + [ run unicode/unicode_iterator_test.cpp ../build//boost_regex : : : <define>TEST_UTF16 : unicode_iterator_test_utf16 ] + [ run static_mutex/static_mutex_test.cpp + ../../thread/build//boost_thread ../build//boost_regex + ] + [ run object_cache/object_cache_test.cpp ../build//boost_regex + ] + + [ run config_info/regex_config_info.cpp + ../build//boost_regex/<link>static + : # command line + : # input files + : <test-info>always_show_run_output + ] + [ run config_info/regex_config_info.cpp ../build//boost_regex + : # command line + : # input files + : <test-info>always_show_run_output + : regex_dll_config_info + ] + + [ run collate_info/collate_info.cpp ../build//boost_regex + : : : <test-info>always_show_run_output : test_collate_info ] + + + [ compile concepts/concept_check.cpp ../build//boost_regex + ] + [ compile concepts/icu_concept_check.cpp ../build//boost_regex + ] + + [ run + # sources + captures/captures_test.cpp + captures//boost_regex_extra + : # additional args + : # test-files + : # requirements + <threading>multi + <define>BOOST_REGEX_MATCH_EXTRA=1 + <define>BOOST_REGEX_NO_LIB=1 + : # test name + captures_test + ] + +[ run regress/$(R_SOURCE) .//boost_regex_recursive + ../build//icu_options + : # command line + : # input files + : # requirements + <define>BOOST_REGEX_RECURSIVE=1 + : regex_regress_recursive ] + +[ run regress/$(R_SOURCE) ./noeh_test//boost_regex_noeh + ../build//icu_options + : # command line + : # input files + : # requirements + <define>BOOST_NO_EXCEPTIONS=1 + <exception-handling>off + <link>static + <runtime-link>shared + : regex_regress_noeh ] + +; + +compile test_consolidated.cpp ; + +build-project ../example ; + + diff --git a/libs/regex/test/auto-link-test/Jamfile b/libs/regex/test/auto-link-test/Jamfile new file mode 100644 index 0000000000..dab1b0ed1d --- /dev/null +++ b/libs/regex/test/auto-link-test/Jamfile @@ -0,0 +1,81 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# +# This Jamfile tests the ability of some Windows compilers +# to automatically link to the right lib file, +# it is not generally applicable. +# + +R_SOURCE = +basic_tests.cpp +main.cpp +test_alt.cpp +test_anchors.cpp +test_asserts.cpp +test_backrefs.cpp +test_deprecated.cpp +test_emacs.cpp +test_escapes.cpp +test_grep.cpp +test_locale.cpp +test_mfc.cpp +test_non_greedy_repeats.cpp +test_perl_ex.cpp +test_replace.cpp +test_sets.cpp +test_simple_repeats.cpp +test_tricky_cases.cpp +test_icu.cpp +test_unicode.cpp +test_overloads.cpp +test_operators.cpp +; + + +subproject libs/regex/test/auto-link-test ; + +# bring in the rules for testing +import testing ; + +run + # sources + <template>../../build/regex-options + <template>../../build/regex-test-options + ../regress/$(R_SOURCE) +: +: # input files + ../regress/tests.txt +: # requirements + <library-path>../../../../stage/lib + <define>BOOST_LIB_DIAGNOSTIC=1 +: # program name + regex_regress +; + +# and now the dll versions: + +run + # sources + <template>../../build/regex-options + <template>../../build/regex-test-options + ../regress/$(R_SOURCE) +: +: # input files + ../regress/tests.txt +: # requirements + <library-path>../../../../stage/lib + <define>BOOST_ALL_DYN_LINK=1 + <runtime-link>dynamic + <define>BOOST_LIB_DIAGNOSTIC=1 +: # program name + regex_regress_dll +; + + + + + + diff --git a/libs/regex/test/c_compiler_checks/posix_api_check.c b/libs/regex/test/c_compiler_checks/posix_api_check.c new file mode 100644 index 0000000000..c12525c8b4 --- /dev/null +++ b/libs/regex/test/c_compiler_checks/posix_api_check.c @@ -0,0 +1,64 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE posix_api_compiler_check.c + * VERSION see <boost/version.hpp> + * DESCRIPTION: Verify that POSIX API calls compile: note this is a compile + * time check only. + */ + +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include <boost/regex.h> + +const char* expression = "^"; +const char* text = "\n "; +regmatch_t matches[1]; +int flags = REG_EXTENDED | REG_BASIC | REG_NOSPEC | REG_ICASE | REG_NOSUB | + REG_NEWLINE | REG_PEND | REG_NOCOLLATE | REG_ESCAPE_IN_LISTS | + REG_NEWLINE_ALT | REG_PERL | REG_AWK | REG_GREP | REG_EGREP; + + +int main() +{ + regex_tA re; + int result; + result = regcompA(&re, expression, REG_AWK); + if(result > (int)REG_NOERROR) + { + char buf[256]; + regerrorA(result, &re, buf, sizeof(buf)); + printf(buf); + return result; + } + assert(re.re_nsub == 0); + matches[0].rm_so = 0; + matches[0].rm_eo = strlen(text); + result = regexecA(&re, text, 1, matches, REG_NOTBOL | REG_NOTEOL | REG_STARTEND); + if(result > (int)REG_NOERROR) + { + char buf[256]; + regerrorA(result, &re, buf, sizeof(buf)); + printf(buf); + regfreeA(&re); + return result; + } + assert((matches[0].rm_so == matches[0].rm_eo) && (matches[0].rm_eo == 1)); + regfreeA(&re); + printf("no errors found\n"); + return 0; +} + + + diff --git a/libs/regex/test/c_compiler_checks/posix_api_check.cpp b/libs/regex/test/c_compiler_checks/posix_api_check.cpp new file mode 100644 index 0000000000..8daae8f261 --- /dev/null +++ b/libs/regex/test/c_compiler_checks/posix_api_check.cpp @@ -0,0 +1,65 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE posix_api_compiler_check.c + * VERSION see <boost/version.hpp> + * DESCRIPTION: Verify that POSIX API calls compile: note this is a compile + * time check only. + */ + +#include <stdio.h> +#include <string.h> +#include <boost/assert.hpp> +#include <boost/regex.h> +#include <boost/detail/lightweight_test.hpp> + +const char* expression = "^"; +const char* text = "\n "; +regmatch_t matches[1]; +int flags = REG_EXTENDED | REG_BASIC | REG_NOSPEC | REG_ICASE | REG_NOSUB | + REG_NEWLINE | REG_PEND | REG_NOCOLLATE | REG_ESCAPE_IN_LISTS | + REG_NEWLINE_ALT | REG_PERL | REG_AWK | REG_GREP | REG_EGREP; + + +int main() +{ + regex_tA re; + unsigned int result; + result = regcompA(&re, expression, REG_AWK); + if(result > REG_NOERROR) + { + char buf[256]; + regerrorA(result, &re, buf, sizeof(buf)); + printf("%s", buf); + return result; + } + BOOST_TEST(re.re_nsub == 0); + matches[0].rm_so = 0; + matches[0].rm_eo = strlen(text); + result = regexecA(&re, text, 1, matches, REG_NOTBOL | REG_NOTEOL | REG_STARTEND); + if(result > REG_NOERROR) + { + char buf[256]; + regerrorA(result, &re, buf, sizeof(buf)); + printf("%s", buf); + regfreeA(&re); + return result; + } + BOOST_TEST(matches[0].rm_so == matches[0].rm_eo); + regfreeA(&re); + printf("no errors found\n"); + return boost::report_errors(); +} + + + diff --git a/libs/regex/test/c_compiler_checks/wide_posix_api_check.c b/libs/regex/test/c_compiler_checks/wide_posix_api_check.c new file mode 100644 index 0000000000..c9ab85bbb5 --- /dev/null +++ b/libs/regex/test/c_compiler_checks/wide_posix_api_check.c @@ -0,0 +1,89 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE wide_posix_api_compiler_check.c + * VERSION see <boost/version.hpp> + * DESCRIPTION: Verify that POSIX API calls compile: note this is a compile + * time check only. + */ + +#define UNICODE +#define _UNICODE + +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include <stdlib.h> +#include <boost/regex.h> + +#ifndef BOOST_NO_WREGEX +#include <wchar.h> + +const wchar_t* expression = L"^"; +const wchar_t* text = L"\n "; +regmatch_t matches[1]; +int flags = REG_EXTENDED | REG_BASIC | REG_NOSPEC | REG_ICASE | REG_NOSUB | + REG_NEWLINE | REG_PEND | REG_NOCOLLATE | REG_ESCAPE_IN_LISTS | + REG_NEWLINE_ALT | REG_PERL | REG_AWK | REG_GREP | REG_EGREP; + + +int main() +{ + regex_t re; + int result; + wchar_t buf[256]; + char nbuf[256]; + int i; + result = regcomp(&re, expression, REG_AWK); + if(result > (int)REG_NOERROR) + { + regerror(result, &re, buf, sizeof(buf)); + for(i = 0; i < 256; ++i) + nbuf[i] = (char)(buf[i]); + printf(nbuf); + return result; + } + if(re.re_nsub != 0) + { + regfree(&re); + exit(-1); + } + matches[0].rm_so = 0; + matches[0].rm_eo = wcslen(text); + result = regexec(&re, text, 1, matches, REG_NOTBOL | REG_NOTEOL | REG_STARTEND); + if(result > (int)REG_NOERROR) + { + regerror(result, &re, buf, sizeof(buf)); + for(i = 0; i < 256; ++i) + nbuf[i] = (char)(buf[i]); + printf(nbuf); + regfree(&re); + return result; + } + if((matches[0].rm_so != matches[0].rm_eo) || (matches[0].rm_eo != 1)) + { + regfree(&re); + exit(-1); + } + regfree(&re); + printf("no errors found\n"); + return 0; +} + +#else +# error "This library has not been configured for wide character support" +#endif + + + + diff --git a/libs/regex/test/c_compiler_checks/wide_posix_api_check.cpp b/libs/regex/test/c_compiler_checks/wide_posix_api_check.cpp new file mode 100644 index 0000000000..3017261998 --- /dev/null +++ b/libs/regex/test/c_compiler_checks/wide_posix_api_check.cpp @@ -0,0 +1,100 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE wide_posix_api_compiler_check.c + * VERSION see <boost/version.hpp> + * DESCRIPTION: Verify that POSIX API calls compile: note this is a compile + * time check only. + */ + +#define UNICODE +#define _UNICODE + +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include <stdlib.h> +#include <boost/regex.h> +#include <wchar.h> + +#ifndef BOOST_NO_WREGEX + +const wchar_t* expression = L"^"; +const wchar_t* text = L"\n "; +regmatch_t matches[1]; +int flags = REG_EXTENDED | REG_BASIC | REG_NOSPEC | REG_ICASE | REG_NOSUB | + REG_NEWLINE | REG_PEND | REG_NOCOLLATE | REG_ESCAPE_IN_LISTS | + REG_NEWLINE_ALT | REG_PERL | REG_AWK | REG_GREP | REG_EGREP; + + +int main() +{ + regex_t re; + unsigned result; + result = regcomp(&re, expression, REG_AWK); + if(result > REG_NOERROR) + { + wchar_t buf[256]; + regerror(result, &re, buf, sizeof(buf)); + char nbuf[256]; + for(int i = 0; i < 256; ++i) + nbuf[i] = static_cast<char>(buf[i]); + printf("%s", nbuf); + return result; + } + if(re.re_nsub != 0) + { + regfree(&re); + exit(-1); + } + matches[0].rm_so = 0; + matches[0].rm_eo = wcslen(text); + result = regexec(&re, text, 1, matches, REG_NOTBOL | REG_NOTEOL | REG_STARTEND); + if(result > REG_NOERROR) + { + wchar_t buf[256]; + regerror(result, &re, buf, sizeof(buf)); + char nbuf[256]; + for(int i = 0; i < 256; ++i) + nbuf[i] = static_cast<char>(buf[i]); + printf("%s", nbuf); + regfree(&re); + return result; + } + if((matches[0].rm_so != matches[0].rm_eo) || (matches[0].rm_eo != 1)) + { + regfree(&re); + exit(-1); + } + regfree(&re); + printf("%s", "no errors found\n"); + return 0; +} + +#else + +#include <iostream> + +int main() +{ + std::cout << + "\n<note>\n" + "This platform does not provide the needed wide character support for this test.\n" + "</note>\n"; + return 0; +} +#endif + + + + diff --git a/libs/regex/test/captures/Jamfile.v2 b/libs/regex/test/captures/Jamfile.v2 new file mode 100644 index 0000000000..527315c276 --- /dev/null +++ b/libs/regex/test/captures/Jamfile.v2 @@ -0,0 +1,38 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +project + : source-location ../../src + ; + +EX_SOURCES = + c_regex_traits.cpp + cpp_regex_traits.cpp + cregex.cpp + fileiter.cpp + icu.cpp + instances.cpp + posix_api.cpp + regex.cpp + regex_debug.cpp + regex_raw_buffer.cpp + regex_traits_defaults.cpp + static_mutex.cpp + w32_regex_traits.cpp + wc_regex_traits.cpp + wide_posix_api.cpp + winstances.cpp + usinstances.cpp ; + +lib boost_regex_extra : $(EX_SOURCES) + : + <define>BOOST_REGEX_MATCH_EXTRA=1 + <link>shared:<define>BOOST_REGEX_DYN_LINK=1 + : + ; + + + + diff --git a/libs/regex/test/captures/captures_test.cpp b/libs/regex/test/captures/captures_test.cpp new file mode 100644 index 0000000000..fcfd51f3e3 --- /dev/null +++ b/libs/regex/test/captures/captures_test.cpp @@ -0,0 +1,116 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE captures_test.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Basic tests for additional captures information. + */ + +#include <boost/regex.hpp> +#include <boost/test/test_tools.hpp> +#include <boost/array.hpp> + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) + +#ifdef __sgi +template <class T> +void test_captures(const std::string& regx, const std::string& text, const T& expected) +#else +template <class T> +void test_captures(const std::string& regx, const std::string& text, T& expected) +#endif +{ + boost::regex e(regx); + boost::smatch what; + if(boost::regex_match(text, what, e, boost::match_extra)) + { + unsigned i, j; +#ifndef __sgi + // strange type deduction causes this test to fail on SGI: + BOOST_CHECK(what.size() == ARRAY_SIZE(expected)); +#endif + for(i = 0; i < what.size(); ++i) + { + BOOST_CHECK(what.captures(i).size() <= ARRAY_SIZE(expected[i])); + for(j = 0; j < what.captures(i).size(); ++j) + { + BOOST_CHECK(what.captures(i)[j] == expected[i][j]); + } + } + } +} + +int test_main(int , char* []) +{ + typedef const char* pchar; + pchar e1[4][5] = + { + { "aBBcccDDDDDeeeeeeee", }, + { "a", "BB", "ccc", "DDDDD", "eeeeeeee", }, + { "a", "ccc", "eeeeeeee", }, + { "BB", "DDDDD", }, + }; + test_captures("(([[:lower:]]+)|([[:upper:]]+))+", "aBBcccDDDDDeeeeeeee", e1); + pchar e2[4][2] = + { + { "abd" }, + { "b", "" }, + { "" }, + }; + test_captures("a(b+|((c)*))+d", "abd", e2); + pchar e3[3][1] = + { + { "abcbar" }, + { "abc" }, + }; + test_captures("(.*)bar|(.*)bah", "abcbar", e3); + pchar e4[3][1] = + { + { "abcbah" }, + { 0, }, + { "abc" }, + }; + test_captures("(.*)bar|(.*)bah", "abcbah", e4); + pchar e5[2][16] = + { + { "now is the time for all good men to come to the aid of the party" }, + { "now", "is", "the", "time", "for", "all", "good", "men", "to", "come", "to", "the", "aid", "of", "the", "party" }, + }; + test_captures("^(?:(\\w+)|(?>\\W+))*$", "now is the time for all good men to come to the aid of the party", e5); + pchar e6[2][16] = + { + { "now is the time for all good men to come to the aid of the party" }, + { "now", "is", "the", "time", "for", "all", "good", "men", "to", "come", "to", "the", "aid", "of", "the", "party" }, + }; + test_captures("^(?>(\\w+)\\W*)*$", "now is the time for all good men to come to the aid of the party", e6); + pchar e7[4][14] = + { + { "now is the time for all good men to come to the aid of the party" }, + { "now" }, + { "is", "the", "time", "for", "all", "good", "men", "to", "come", "to", "the", "aid", "of", "the" }, + { "party" }, + }; + test_captures("^(\\w+)\\W+(?>(\\w+)\\W+)*(\\w+)$", "now is the time for all good men to come to the aid of the party", e7); + pchar e8[5][9] = + { + { "now is the time for all good men to come to the aid of the party" } , + { "now" }, + { "is", "for", "men", "to", "of" }, + { "the", "time", "all", "good", "to", "come", "the", "aid", "the" }, + { "party" }, + }; + test_captures("^(\\w+)\\W+(?>(\\w+)\\W+(?:(\\w+)\\W+){0,2})*(\\w+)$", "now is the time for all good men to come to the aid of the party", e8); + return 0; +} + +#include <boost/test/included/test_exec_monitor.hpp> diff --git a/libs/regex/test/collate_info/collate_info.cpp b/libs/regex/test/collate_info/collate_info.cpp new file mode 100644 index 0000000000..ab3e1051a9 --- /dev/null +++ b/libs/regex/test/collate_info/collate_info.cpp @@ -0,0 +1,253 @@ +/* + * + * Copyright (c) 2005 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +// most of the workarounds and headers we need are already in here: +#include <boost/regex.hpp> +#include <boost/regex/v4/primary_transform.hpp> +#include <assert.h> + +#ifdef BOOST_INTEL +#pragma warning(disable:1418 981 983 2259) +#endif + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::strxfrm; +#ifndef BOOST_NO_WREGEX + using ::wcsxfrm; +#endif +} +#endif + +#include <iostream> + +template <class charT> +int make_int(charT c) +{ + return c; +} + +int make_int(char c) +{ + return static_cast<unsigned char>(c); +} + +template <class charT> +void print_string(const std::basic_string<charT>& s) +{ + typedef typename std::basic_string<charT>::size_type size_type; + std::cout.put(static_cast<unsigned char>('"')); + for(size_type i = 0; i < s.size(); ++i) + { + if((s[i] > ' ') && (s[i] <= 'z')) + { + std::cout.put(static_cast<unsigned char>(s[i])); + } + else + { + std::cout << "\\x" << std::hex << make_int(s[i]); + } + } + std::cout.put(static_cast<unsigned char>('"')); +} + +void print_c_char(char c) +{ + char buf[50]; + const char cbuf[2] = { c, 0, }; + std::size_t len = std::strxfrm(buf, cbuf, 50); + std:: cout << len << " "; + std::string s(buf); + print_string(s); +} +#ifndef BOOST_NO_WREGEX +void print_c_char(wchar_t c) +{ + wchar_t buf[50]; + const wchar_t cbuf[2] = { c, 0, }; + std::size_t len = std::wcsxfrm(buf, cbuf, 50); + std:: cout << len << " "; + std::wstring s(buf); + print_string(s); +} +#endif +template <class charT> +void print_c_info(charT, const char* name) +{ + std::cout << "Info for " << name << " C API's:" << std::endl; + std::cout << " \"a\" : "; + print_c_char(charT('a')); + std::cout << std::endl; + std::cout << " \"A\" : "; + print_c_char(charT('A')); + std::cout << std::endl; + std::cout << " \"z\" : "; + print_c_char(charT('z')); + std::cout << std::endl; + std::cout << " \"Z\" : "; + print_c_char(charT('Z')); + std::cout << std::endl; + std::cout << " \";\" : "; + print_c_char(charT(';')); + std::cout << std::endl; + std::cout << " \"{\" : "; + print_c_char(charT('{')); + std::cout << std::endl; +} + +template <class charT> +void print_cpp_char(charT c) +{ +#ifndef BOOST_NO_STD_LOCALE + std::locale l; + const std::collate<charT>& col = BOOST_USE_FACET(std::collate<charT>, l); + std::basic_string<charT> result = col.transform(&c, &c+1); + std::cout << result.size() << " "; + print_string(result); + std::size_t n = result.find(charT(0)); + if(n != std::basic_string<charT>::npos) + { + std::cerr << "(Error in location of null, found: " << n << ")"; + } +#endif +} + +template <class charT> +void print_cpp_info(charT, const char* name) +{ + std::cout << "Info for " << name << " C++ locale API's:" << std::endl; + std::cout << " \"a\" : "; + print_cpp_char(charT('a')); + std::cout << std::endl; + std::cout << " \"A\" : "; + print_cpp_char(charT('A')); + std::cout << std::endl; + std::cout << " \"z\" : "; + print_cpp_char(charT('z')); + std::cout << std::endl; + std::cout << " \"Z\" : "; + print_cpp_char(charT('Z')); + std::cout << std::endl; + std::cout << " \";\" : "; + print_cpp_char(charT(';')); + std::cout << std::endl; + std::cout << " \"{\" : "; + print_cpp_char(charT('{')); + std::cout << std::endl; +} + +template <class traits> +void print_sort_syntax(const traits& pt, const char* name) +{ + std::cout << "Sort Key Syntax for type " << name << ":\n"; + typedef typename traits::char_type char_type; + char_type delim; + unsigned result = ::boost::re_detail::find_sort_syntax(&pt, &delim); + std::cout << " "; + switch(result) + { + case boost::re_detail::sort_C: + std::cout << "sort_C"; + break; + case boost::re_detail::sort_fixed: + std::cout << "sort_fixed" << " " << static_cast<int>(delim); + break; + case boost::re_detail::sort_delim: + { + std::cout << "sort_delim" << " "; + std::basic_string<char_type> s(1, delim); + print_string(s); + } + break; + case boost::re_detail::sort_unknown: + std::cout << "sort_unknown"; + break; + default: + std::cout << "bad_value"; + break; + } + std::cout << std::endl; + + typedef typename traits::string_type string_type; + typedef typename traits::char_type char_type; + + char_type c[5] = { 'a', 'A', ';', '{', '}', }; + for(int i = 0; i < 5; ++i) + { + string_type s(1, c[i]); + string_type sk = pt.transform(s.c_str(), s.c_str() + s.size()); + string_type skp = pt.transform_primary(s.c_str(), s.c_str() + s.size()); + print_string(s); + std::cout << " "; + print_string(sk); + std::cout << " "; + print_string(skp); + std::cout << std::endl; + } +} + +#ifndef BOOST_NO_STD_LOCALE +template <class charT> +void print_ctype_info(charT, const char* name) +{ + std::locale l; + const std::ctype<charT>& ct = BOOST_USE_FACET(std::ctype<charT>, l); + typedef typename std::ctype<charT>::mask mask_type; + mask_type m = static_cast<mask_type>(std::ctype<charT>::lower | std::ctype<charT>::upper); + bool result = ct.is(m, static_cast<charT>('a')) && ct.is(m , static_cast<charT>('A')); + std::cout << "Checking std::ctype<" << name << ">::is(mask, c):" << std::endl; +#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET + std::cout << " Boost.Regex believes this facet to be buggy..." << std::endl; +#else + std::cout << " Boost.Regex believes this facet to be correct..." << std::endl; +#endif + std::cout << " Actual behavior, appears to be " << (result ? "correct." : "buggy.") << std::endl; + assert(ct.is(std::ctype<charT>::alnum, 'a')); + assert(ct.is(std::ctype<charT>::alnum, 'A')); + assert(ct.is(std::ctype<charT>::alnum, '0')); +} +#endif + +int cpp_main(int /*argc*/, char * /*argv*/[]) +{ + print_c_info(char(0), "char"); +#ifndef BOOST_NO_WREGEX + print_c_info(wchar_t(0), "wchar_t"); +#endif + print_cpp_info(char(0), "char"); +#ifndef BOOST_NO_WREGEX + print_cpp_info(wchar_t(0), "wchar_t"); +#endif + +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) + boost::c_regex_traits<char> a; + print_sort_syntax(a, "boost::c_regex_traits<char>"); +#ifndef BOOST_NO_WREGEX + boost::c_regex_traits<wchar_t> b; + print_sort_syntax(b, "boost::c_regex_traits<wchar_t>"); +#endif +#endif +#ifndef BOOST_NO_STD_LOCALE + boost::cpp_regex_traits<char> c; + print_sort_syntax(c, "boost::cpp_regex_traits<char>"); +#ifndef BOOST_NO_WREGEX + boost::cpp_regex_traits<wchar_t> d; + print_sort_syntax(d, "boost::cpp_regex_traits<wchar_t>"); +#endif + print_ctype_info(char(0), "char"); +#ifndef BOOST_NO_WREGEX + print_ctype_info(wchar_t(0), "wchar_t"); +#endif +#endif + return 0; +} + +#include <boost/test/included/prg_exec_monitor.hpp> diff --git a/libs/regex/test/concepts/concept_check.cpp b/libs/regex/test/concepts/concept_check.cpp new file mode 100644 index 0000000000..21448f210e --- /dev/null +++ b/libs/regex/test/concepts/concept_check.cpp @@ -0,0 +1,105 @@ +/* + * + * Copyright (c) 2003 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include <boost/config.hpp> + +#if defined(BOOST_MSVC) +// this lets us compile at warning level 4 without seeing concept-check related warnings +# pragma warning(disable:4100) +#endif +#ifdef __BORLANDC__ +#pragma option -w-8019 -w-8004 -w-8008 +#endif +#ifdef BOOST_INTEL +#pragma warning(disable:1418 981 983 595 383) +#endif + +#include <boost/regex.hpp> +#include <boost/detail/workaround.hpp> +#if !BOOST_WORKAROUND(_MSC_VER, < 1310) && !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__GNUC__, < 3) +#include <boost/regex/concepts.hpp> +#endif + + +int main() +{ + // VC6 and VC7 can't cope with the iterator architypes, + // don't bother testing as it doesn't work: +#if !BOOST_WORKAROUND(_MSC_VER, < 1310) && !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__GNUC__, < 3) + boost::function_requires< + boost::RegexTraitsConcept< + boost::regex_traits<char> + > + >(); +#ifndef BOOST_NO_STD_LOCALE + boost::function_requires< + boost::BoostRegexConcept< + boost::basic_regex<char, boost::cpp_regex_traits<char> > + > + >(); +#ifndef BOOST_NO_WREGEX + boost::function_requires< + boost::BoostRegexConcept< + boost::basic_regex<wchar_t, boost::cpp_regex_traits<wchar_t> > + > + >(); +#endif +#endif +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) + boost::function_requires< + boost::BoostRegexConcept< + boost::basic_regex<char, boost::c_regex_traits<char> > + > + >(); +#ifndef BOOST_NO_WREGEX + boost::function_requires< + boost::BoostRegexConcept< + boost::basic_regex<wchar_t, boost::c_regex_traits<wchar_t> > + > + >(); +#endif +#endif +#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) + boost::function_requires< + boost::BoostRegexConcept< + boost::basic_regex<char, boost::w32_regex_traits<char> > + > + >(); +#ifndef BOOST_NO_WREGEX + boost::function_requires< + boost::BoostRegexConcept< + boost::basic_regex<wchar_t, boost::w32_regex_traits<wchar_t> > + > + >(); +#endif +#endif + // + // now test the regex_traits concepts: + // + typedef boost::basic_regex<char, boost::regex_traits_architype<char> > regex_traits_tester_type1; + boost::function_requires< + boost::BoostRegexConcept< + regex_traits_tester_type1 + > + >(); +#if !defined(__MWERKS__) && !defined(__SUNPRO_CC) // MWCW tries to instantiate std::basic_string<boost::char_architype>, not sure whose bug this is.... + typedef boost::basic_regex<boost::char_architype, boost::regex_traits_architype<boost::char_architype> > regex_traits_tester_type2; + boost::function_requires< + boost::BaseRegexConcept< + regex_traits_tester_type2 + > + >(); +#endif // __MWERKS__ +#endif + return 0; +} + + diff --git a/libs/regex/test/concepts/icu_concept_check.cpp b/libs/regex/test/concepts/icu_concept_check.cpp new file mode 100644 index 0000000000..526758a43d --- /dev/null +++ b/libs/regex/test/concepts/icu_concept_check.cpp @@ -0,0 +1,157 @@ +/* + * + * Copyright (c) 2003 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +// +// This define keep ICU in it's own namespace: helps us to track bugs that would +// otherwise go unnoticed: +// +#define U_USING_ICU_NAMESPACE 0 + +#include <boost/regex/config.hpp> + +#if defined(BOOST_MSVC) +// this lets us compile at warning level 4 without seeing concept-check related warnings +# pragma warning(disable:4100) +#endif +#ifdef __BORLANDC__ +#pragma option -w-8019 -w-8004 -w-8008 +#endif + +#ifdef BOOST_HAS_ICU + +#include <boost/regex/icu.hpp> +#include <boost/detail/workaround.hpp> +#if !BOOST_WORKAROUND(_MSC_VER, < 1310) && !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__GNUC__, < 3) +#include <boost/regex/concepts.hpp> +#endif + + +int main() +{ + // VC6 and VC7 can't cope with the iterator architypes, + // don't bother testing as it doesn't work: +#if !BOOST_WORKAROUND(_MSC_VER, < 1310) && !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__GNUC__, < 3) + boost::function_requires< + boost::RegexTraitsConcept< + boost::icu_regex_traits + > + >(); + boost::function_requires< + boost::BoostRegexConcept< + boost::u32regex + > + >(); + // + // Now test additional function overloads: + // + bool b; + unsigned long buf[2] = { 0, }; + const void* pb = buf; + typedef boost::bidirectional_iterator_archetype<char> utf8_arch1; + typedef boost::bidirectional_iterator_archetype<unsigned char> utf8_arch2; + typedef boost::bidirectional_iterator_archetype<UChar> utf16_arch; + typedef boost::bidirectional_iterator_archetype<wchar_t> wchar_arch; + boost::match_results<utf8_arch1> m1; + boost::match_results<utf8_arch2> m2; + boost::match_results<utf16_arch> m3; + boost::match_results<wchar_arch> m4; + boost::match_results<const char*> cm1; + boost::match_results<const unsigned char*> cm2; + boost::match_results<const UChar*> cm3; + boost::match_results<const wchar_t*> cm4; + boost::match_results<std::string::const_iterator> sm1; + boost::match_results<std::wstring::const_iterator> sm2; + boost::u32regex e1; + boost::regex_constants::match_flag_type flgs = boost::regex_constants::match_default; + std::string s1; + std::wstring s2; + U_NAMESPACE_QUALIFIER UnicodeString us; + b = boost::u32regex_match(utf8_arch1(), utf8_arch1(), m1, e1, flgs); + b = boost::u32regex_match(utf8_arch1(), utf8_arch1(), m1, e1); + b = boost::u32regex_match(utf8_arch2(), utf8_arch2(), m2, e1, flgs); + b = boost::u32regex_match(utf8_arch2(), utf8_arch2(), m2, e1); + b = boost::u32regex_match(utf16_arch(), utf16_arch(), m3, e1, flgs); + b = boost::u32regex_match(utf16_arch(), utf16_arch(), m3, e1); + b = boost::u32regex_match(wchar_arch(), wchar_arch(), m4, e1, flgs); + b = boost::u32regex_match(wchar_arch(), wchar_arch(), m4, e1); + b = boost::u32regex_match((const char*)(pb), cm1, e1, flgs); + b = boost::u32regex_match((const char*)(pb), cm1, e1); + b = boost::u32regex_match((const unsigned char*)(pb), cm2, e1, flgs); + b = boost::u32regex_match((const unsigned char*)(pb), cm2, e1); + b = boost::u32regex_match((const UChar*)(pb), cm3, e1, flgs); + b = boost::u32regex_match((const UChar*)(pb), cm3, e1); + b = boost::u32regex_match((const wchar_t*)(pb), cm4, e1, flgs); + b = boost::u32regex_match((const wchar_t*)(pb), cm4, e1); + b = boost::u32regex_match(s1, sm1, e1, flgs); + b = boost::u32regex_match(s1, sm1, e1); + b = boost::u32regex_match(s2, sm2, e1, flgs); + b = boost::u32regex_match(s2, sm2, e1); + b = boost::u32regex_match(us, cm3, e1, flgs); + b = boost::u32regex_match(us, cm3, e1); + + b = boost::u32regex_search(utf8_arch1(), utf8_arch1(), m1, e1, flgs); + b = boost::u32regex_search(utf8_arch1(), utf8_arch1(), m1, e1); + b = boost::u32regex_search(utf8_arch2(), utf8_arch2(), m2, e1, flgs); + b = boost::u32regex_search(utf8_arch2(), utf8_arch2(), m2, e1); + b = boost::u32regex_search(utf16_arch(), utf16_arch(), m3, e1, flgs); + b = boost::u32regex_search(utf16_arch(), utf16_arch(), m3, e1); + b = boost::u32regex_search(wchar_arch(), wchar_arch(), m4, e1, flgs); + b = boost::u32regex_search(wchar_arch(), wchar_arch(), m4, e1); + b = boost::u32regex_search((const char*)(pb), cm1, e1, flgs); + b = boost::u32regex_search((const char*)(pb), cm1, e1); + b = boost::u32regex_search((const unsigned char*)(pb), cm2, e1, flgs); + b = boost::u32regex_search((const unsigned char*)(pb), cm2, e1); + b = boost::u32regex_search((const UChar*)(pb), cm3, e1, flgs); + b = boost::u32regex_search((const UChar*)(pb), cm3, e1); + b = boost::u32regex_search((const wchar_t*)(pb), cm4, e1, flgs); + b = boost::u32regex_search((const wchar_t*)(pb), cm4, e1); + b = boost::u32regex_search(s1, sm1, e1, flgs); + b = boost::u32regex_search(s1, sm1, e1); + b = boost::u32regex_search(s2, sm2, e1, flgs); + b = boost::u32regex_search(s2, sm2, e1); + b = boost::u32regex_search(us, cm3, e1, flgs); + b = boost::u32regex_search(us, cm3, e1); + boost::output_iterator_archetype<char> out1 = boost::detail::dummy_constructor(); + out1 = boost::u32regex_replace(out1, utf8_arch1(), utf8_arch1(), e1, (const char*)(pb), flgs); + boost::output_iterator_archetype<unsigned char> out2 = boost::detail::dummy_constructor(); + out2 = boost::u32regex_replace(out2, utf8_arch2(), utf8_arch2(), e1, (const unsigned char*)(pb), flgs); + boost::output_iterator_archetype<UChar> out3 = boost::detail::dummy_constructor(); + out3 = boost::u32regex_replace(out3, utf16_arch(), utf16_arch(), e1, (const UChar*)(pb), flgs); + boost::output_iterator_archetype<wchar_t> out4 = boost::detail::dummy_constructor(); + out4 = boost::u32regex_replace(out4, wchar_arch(), wchar_arch(), e1, (const wchar_t*)(pb), flgs); + + out1 = boost::u32regex_replace(out1, utf8_arch1(), utf8_arch1(), e1, s1, flgs); + out2 = boost::u32regex_replace(out2, utf8_arch2(), utf8_arch2(), e1, s1, flgs); + out3 = boost::u32regex_replace(out3, utf16_arch(), utf16_arch(), e1, s1, flgs); + out4 = boost::u32regex_replace(out4, wchar_arch(), wchar_arch(), e1, s1, flgs); + out1 = boost::u32regex_replace(out1, utf8_arch1(), utf8_arch1(), e1, s2, flgs); + out2 = boost::u32regex_replace(out2, utf8_arch2(), utf8_arch2(), e1, s2, flgs); + out3 = boost::u32regex_replace(out3, utf16_arch(), utf16_arch(), e1, s2, flgs); + out4 = boost::u32regex_replace(out4, wchar_arch(), wchar_arch(), e1, s2, flgs); + out1 = boost::u32regex_replace(out1, utf8_arch1(), utf8_arch1(), e1, us, flgs); + out2 = boost::u32regex_replace(out2, utf8_arch2(), utf8_arch2(), e1, us, flgs); + out3 = boost::u32regex_replace(out3, utf16_arch(), utf16_arch(), e1, us, flgs); + out4 = boost::u32regex_replace(out4, wchar_arch(), wchar_arch(), e1, us, flgs); + // string overloads: + s1 = boost::u32regex_replace(s1, e1, (const char*)(pb), flgs); + s2 = boost::u32regex_replace(s2, e1, (const wchar_t*)(pb), flgs); + s1 = boost::u32regex_replace(s1, e1, s1, flgs); + s2 = boost::u32regex_replace(s2, e1, s2, flgs); + s1 = boost::u32regex_replace(s1, e1, (const char*)(pb)); + s2 = boost::u32regex_replace(s2, e1, (const wchar_t*)(pb)); + s1 = boost::u32regex_replace(s1, e1, s1); + s2 = boost::u32regex_replace(s2, e1, s2); + +#endif + return 0; +} + +#endif diff --git a/libs/regex/test/config_info/regex_config_info.cpp b/libs/regex/test/config_info/regex_config_info.cpp new file mode 100644 index 0000000000..211e9ec0cf --- /dev/null +++ b/libs/regex/test/config_info/regex_config_info.cpp @@ -0,0 +1,73 @@ +/* + * + * Copyright (c) 2003 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +// +// This program extends config_info to print out regex library +// configuration information. We do this by redfining the main +// provided by config_info, our real main will call it later: +// +#ifndef OLD_MAIN +# define OLD_MAIN info_main +#endif + +#define main OLD_MAIN +#include <libs/config/test/config_info.cpp> +#undef main +#ifndef NEW_MAIN +# define NEW_MAIN main +#endif +#include <boost/regex.hpp> + +int NEW_MAIN() +{ + OLD_MAIN(); + + print_separator(); + PRINT_MACRO(BOOST_REGEX_USER_CONFIG); + PRINT_MACRO(BOOST_REGEX_USE_C_LOCALE); + PRINT_MACRO(BOOST_REGEX_USE_CPP_LOCALE); + PRINT_MACRO(BOOST_REGEX_HAS_DLL_RUNTIME); + PRINT_MACRO(BOOST_REGEX_DYN_LINK); + PRINT_MACRO(BOOST_REGEX_NO_LIB); + PRINT_MACRO(BOOST_REGEX_NO_TEMPLATE_SWITCH_MERGE); + PRINT_MACRO(BOOST_REGEX_NO_W32); + PRINT_MACRO(BOOST_REGEX_NO_BOOL); + PRINT_MACRO(BOOST_REGEX_NO_EXTERNAL_TEMPLATES); + PRINT_MACRO(BOOST_REGEX_NO_FWD); + PRINT_MACRO(BOOST_REGEX_V3); + PRINT_MACRO(BOOST_REGEX_HAS_MS_STACK_GUARD); + PRINT_MACRO(BOOST_REGEX_RECURSIVE); + PRINT_MACRO(BOOST_REGEX_NON_RECURSIVE); + PRINT_MACRO(BOOST_REGEX_BLOCKSIZE); + PRINT_MACRO(BOOST_REGEX_MAX_BLOCKS); + PRINT_MACRO(BOOST_REGEX_MAX_CACHE_BLOCKS); + PRINT_MACRO(BOOST_NO_WREGEX); + PRINT_MACRO(BOOST_REGEX_NO_FILEITER); + PRINT_MACRO(BOOST_REGEX_STATIC_LINK); + PRINT_MACRO(BOOST_REGEX_DYN_LINK); + PRINT_MACRO(BOOST_REGEX_DECL); + PRINT_MACRO(BOOST_REGEX_CALL); + PRINT_MACRO(BOOST_REGEX_CCALL); + PRINT_MACRO(BOOST_REGEX_MAX_STATE_COUNT); + PRINT_MACRO(BOOST_REGEX_BUGGY_CTYPE_FACET); + PRINT_MACRO(BOOST_REGEX_MATCH_EXTRA); + PRINT_MACRO(BOOST_HAS_ICU); + PRINT_MACRO(BOOST_REGEX_HAS_OTHER_WCHAR_T); + +#if defined(BOOST_REGEX_CONFIG_INFO) && !defined(NO_RECURSE) + print_regex_library_info(); +#endif + + return 0; +} + + + diff --git a/libs/regex/test/named_subexpressions/named_subexpressions_test.cpp b/libs/regex/test/named_subexpressions/named_subexpressions_test.cpp new file mode 100644 index 0000000000..c4c238ae9f --- /dev/null +++ b/libs/regex/test/named_subexpressions/named_subexpressions_test.cpp @@ -0,0 +1,112 @@ +/* + * + * Copyright (c) 2009 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include <boost/regex.hpp> +#include <boost/test/test_tools.hpp> + +#ifdef BOOST_INTEL +#pragma warning(disable:1418 981 983 383) +#endif + +template <class charT> +void test_named_subexpressions(charT) +{ + // + // Really this is just a test that the overloaded access functions work correctly: + // + static const charT e[] = + { + '(', '?', '\'', 'o', 'n', 'e', '\'', 'a', '+', ')', '(', '?', '<', 't', 'w', 'o', '>', 'b', '+', ')', '\0' + }; + static const charT t[] = + { + 'm', 'm', 'a', 'a', 'a', 'b', 'b', 'n', 'n', '\0' + }; + static const charT one[] = + { + 'o', 'n', 'e', '\0' + }; + static const charT two[] = + { + 't', 'w', 'o', '\0' + }; + static const std::basic_string<charT> s_one(one); + static const std::basic_string<charT> s_two(two); + static const charT result1[] = { 'a', 'a', 'a', '\0' }; + static const charT result2[] = { 'b', 'b', '\0' }; + static const std::basic_string<charT> s_result1(result1); + static const std::basic_string<charT> s_result2(result2); + + static const char* c_one = "one"; + static const char* c_two = "two"; + static const std::string cs_one(c_one); + static const std::string cs_two(c_two); + + boost::basic_regex<charT> expression(e); + boost::match_results<const charT*> what; + if(regex_search(t, what, expression)) + { + BOOST_CHECK(what.length(1) == 3); + BOOST_CHECK(what.length(one) == 3); + BOOST_CHECK(what.length(s_one) == 3); + BOOST_CHECK(what.length(c_one) == 3); + BOOST_CHECK(what.length(cs_one) == 3); + BOOST_CHECK(what.position(1) == 2); + BOOST_CHECK(what.position(one) == 2); + BOOST_CHECK(what.position(s_one) == 2); + BOOST_CHECK(what.position(c_one) == 2); + BOOST_CHECK(what.position(cs_one) == 2); + BOOST_CHECK(what.str(1) == s_result1); + BOOST_CHECK(what.str(one) == s_result1); + BOOST_CHECK(what.str(s_one) == s_result1); + BOOST_CHECK(what.str(c_one) == s_result1); + BOOST_CHECK(what.str(cs_one) == s_result1); + BOOST_CHECK(what[1] == s_result1); + BOOST_CHECK(what[one] == s_result1); + BOOST_CHECK(what[s_one] == s_result1); + BOOST_CHECK(what[c_one] == s_result1); + BOOST_CHECK(what[cs_one] == s_result1); + + BOOST_CHECK(what.length(2) == 2); + BOOST_CHECK(what.length(two) == 2); + BOOST_CHECK(what.length(s_two) == 2); + BOOST_CHECK(what.length(c_two) == 2); + BOOST_CHECK(what.length(cs_two) == 2); + BOOST_CHECK(what.position(2) == 5); + BOOST_CHECK(what.position(two) == 5); + BOOST_CHECK(what.position(s_two) == 5); + BOOST_CHECK(what.position(c_two) == 5); + BOOST_CHECK(what.position(cs_two) == 5); + BOOST_CHECK(what.str(2) == s_result2); + BOOST_CHECK(what.str(two) == s_result2); + BOOST_CHECK(what.str(s_two) == s_result2); + BOOST_CHECK(what.str(c_two) == s_result2); + BOOST_CHECK(what.str(cs_two) == s_result2); + BOOST_CHECK(what[2] == s_result2); + BOOST_CHECK(what[two] == s_result2); + BOOST_CHECK(what[s_two] == s_result2); + BOOST_CHECK(what[c_two] == s_result2); + BOOST_CHECK(what[cs_two] == s_result2); + } + else + { + BOOST_ERROR("Expected match not found"); + } +} + +int test_main( int , char* [] ) +{ + test_named_subexpressions(char(0)); + test_named_subexpressions(wchar_t(0)); + return 0; +} + +#include <boost/test/included/test_exec_monitor.hpp> diff --git a/libs/regex/test/noeh_test/Jamfile.v2 b/libs/regex/test/noeh_test/Jamfile.v2 new file mode 100644 index 0000000000..dcaa84b961 --- /dev/null +++ b/libs/regex/test/noeh_test/Jamfile.v2 @@ -0,0 +1,50 @@ +# copyright John Maddock 2011 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +project + : requirements + <threading>multi + <link>shared:<define>BOOST_REGEX_DYN_LINK=1 + <toolset>msvc-7.1:<define>TEST_MFC=1 + <toolset>msvc-7.0:<define>TEST_MFC=1 + <toolset>msvc:<asynch-exceptions>on + # There are unidentified linker problems on these platforms: + <toolset>mipspro-7.4:<link>static + <toolset>sun-5.9:<link>static + <warnings>all + <toolset>gcc:<cxxflags>-Wextra + <toolset>gcc:<cxxflags>-Wshadow + <define>U_USING_ICU_NAMESPACE=0 + #<toolset>gcc-mw:<link>static + #<toolset>gcc-mingw:<link>static + <toolset>gcc-cygwin:<link>static + ; + + +lib boost_regex_noeh : + ../../src/c_regex_traits.cpp + ../../src/cpp_regex_traits.cpp + ../../src/cregex.cpp + ../../src/fileiter.cpp + ../../src/icu.cpp + ../../src/instances.cpp + ../../src/posix_api.cpp + ../../src/regex.cpp + ../../src/regex_debug.cpp + ../../src/regex_raw_buffer.cpp + ../../src/regex_traits_defaults.cpp + ../../src/static_mutex.cpp + ../../src/w32_regex_traits.cpp + ../../src/wc_regex_traits.cpp + ../../src/wide_posix_api.cpp + ../../src/winstances.cpp + ../../src/usinstances.cpp + ../../build//icu_options + : + <link>static + <define>BOOST_NO_EXCEPTIONS=1 + <exception-handling>off + : + ;
\ No newline at end of file diff --git a/libs/regex/test/object_cache/object_cache_test.cpp b/libs/regex/test/object_cache/object_cache_test.cpp new file mode 100644 index 0000000000..40f55db42e --- /dev/null +++ b/libs/regex/test/object_cache/object_cache_test.cpp @@ -0,0 +1,78 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE object_cache_test.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Test code for a generic object cache. + */ +#include <boost/regex/pending/object_cache.hpp> +#include <boost/test/included/test_exec_monitor.hpp> + +class test_object +{ +public: + test_object(int i) + : m_value(i) + { + ++s_count; + } + int value()const + { + return m_value; + } + static int count() + { + return s_count; + } +private: + int m_value; + static int s_count; +}; + +int test_object::s_count = 0; + +static const int max_cache_size = 5; + +int test_main(int /*argc*/, char * /*argv*/[]) +{ + int i; + for(i = 0; i < 20; ++i) + { + boost::shared_ptr<const test_object> p = boost::object_cache<int, test_object>::get(i, max_cache_size); + BOOST_CHECK(p->value() == i); + p = boost::object_cache<int, test_object>::get(i, max_cache_size); + BOOST_CHECK(p->value() == i); + if(i) + { + p = boost::object_cache<int, test_object>::get(i-1, max_cache_size); + BOOST_CHECK(p->value() == i-1); + } + } + int current_count = test_object::count(); + for(int j = 0; j < 10; ++j) + { + for(i = 20 - max_cache_size; i < 20; ++i) + { + boost::shared_ptr<const test_object> p = boost::object_cache<int, test_object>::get(i, max_cache_size); + BOOST_CHECK(p->value() == i); + p = boost::object_cache<int, test_object>::get(i, max_cache_size); + BOOST_CHECK(p->value() == i); + } + } + BOOST_CHECK(current_count == test_object::count()); + return 0; +} + +#include <boost/test/included/test_exec_monitor.hpp> + + diff --git a/libs/regex/test/pathology/bad_expression_test.cpp b/libs/regex/test/pathology/bad_expression_test.cpp new file mode 100644 index 0000000000..7354d584b9 --- /dev/null +++ b/libs/regex/test/pathology/bad_expression_test.cpp @@ -0,0 +1,61 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: recursion_test.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Test for indefinite recursion and/or stack overrun. + */ + +#include <string> +#include <boost/regex.hpp> +#include <boost/test/test_tools.hpp> + +#ifdef BOOST_INTEL +#pragma warning(disable:1418 981 983 383) +#endif + +int test_main( int , char* [] ) +{ + std::string bad_text(1024, ' '); + std::string good_text(200, ' '); + good_text.append("xyz"); + + boost::smatch what; + + boost::regex e1("(.+)+xyz"); + + BOOST_CHECK(boost::regex_search(good_text, what, e1)); + BOOST_CHECK_THROW(boost::regex_search(bad_text, what, e1), std::runtime_error); + BOOST_CHECK(boost::regex_search(good_text, what, e1)); + + BOOST_CHECK(boost::regex_match(good_text, what, e1)); + BOOST_CHECK_THROW(boost::regex_match(bad_text, what, e1), std::runtime_error); + BOOST_CHECK(boost::regex_match(good_text, what, e1)); + + boost::regex e2("abc|[[:space:]]+(xyz)?[[:space:]]+xyz"); + + BOOST_CHECK(boost::regex_search(good_text, what, e2)); + BOOST_CHECK_THROW(boost::regex_search(bad_text, what, e2), std::runtime_error); + BOOST_CHECK(boost::regex_search(good_text, what, e2)); + + bad_text.assign((std::string::size_type)500000, 'a'); + e2.assign("aaa*@"); + BOOST_CHECK_THROW(boost::regex_search(bad_text, what, e2), std::runtime_error); + good_text.assign((std::string::size_type)5000, 'a'); + BOOST_CHECK(0 == boost::regex_search(good_text, what, e2)); + + return 0; +} + +#include <boost/test/included/test_exec_monitor.hpp> + diff --git a/libs/regex/test/pathology/recursion_test.cpp b/libs/regex/test/pathology/recursion_test.cpp new file mode 100644 index 0000000000..ec18733873 --- /dev/null +++ b/libs/regex/test/pathology/recursion_test.cpp @@ -0,0 +1,65 @@ +/* + * + * Copyright (c) 1998-2002 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE: recursion_test.cpp + * VERSION: see <boost/version.hpp> + * DESCRIPTION: Test for indefinite recursion and/or stack overrun. + */ + +#include <string> +#include <boost/regex.hpp> +#include <boost/test/test_tools.hpp> + +#ifdef BOOST_INTEL +#pragma warning(disable:1418 981 983 383) +#endif + +int test_main( int , char* [] ) +{ + // this regex will recurse twice for each whitespace character matched: + boost::regex e("([[:space:]]|.)+"); + + std::string bad_text(1024*1024*4, ' '); + std::string good_text(200, ' '); + + boost::smatch what; + + // + // Over and over: We want to make sure that after a stack error has + // been triggered, that we can still conduct a good search and that + // subsequent stack failures still do the right thing: + // + BOOST_CHECK(boost::regex_search(good_text, what, e)); + BOOST_CHECK_THROW(boost::regex_search(bad_text, what, e), std::runtime_error); + BOOST_CHECK(boost::regex_search(good_text, what, e)); + BOOST_CHECK_THROW(boost::regex_search(bad_text, what, e), std::runtime_error); + BOOST_CHECK(boost::regex_search(good_text, what, e)); + BOOST_CHECK_THROW(boost::regex_search(bad_text, what, e), std::runtime_error); + BOOST_CHECK(boost::regex_search(good_text, what, e)); + BOOST_CHECK_THROW(boost::regex_search(bad_text, what, e), std::runtime_error); + BOOST_CHECK(boost::regex_search(good_text, what, e)); + + BOOST_CHECK(boost::regex_match(good_text, what, e)); + BOOST_CHECK_THROW(boost::regex_match(bad_text, what, e), std::runtime_error); + BOOST_CHECK(boost::regex_match(good_text, what, e)); + BOOST_CHECK_THROW(boost::regex_match(bad_text, what, e), std::runtime_error); + BOOST_CHECK(boost::regex_match(good_text, what, e)); + BOOST_CHECK_THROW(boost::regex_match(bad_text, what, e), std::runtime_error); + BOOST_CHECK(boost::regex_match(good_text, what, e)); + BOOST_CHECK_THROW(boost::regex_match(bad_text, what, e), std::runtime_error); + BOOST_CHECK(boost::regex_match(good_text, what, e)); + + return 0; +} + +#include <boost/test/included/test_exec_monitor.hpp> diff --git a/libs/regex/test/profile/Makefile b/libs/regex/test/profile/Makefile new file mode 100644 index 0000000000..f1b3def7b3 --- /dev/null +++ b/libs/regex/test/profile/Makefile @@ -0,0 +1,16 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + + +regress : + g++ -fprofile-arcs -ftest-coverage -DBOOST_REGEX_RECURSIVE -DBOOST_REGEX_BLOCKSIZE=512 -DBOOST_REGEX_MAX_CACHE_BLOCKS=0 -DBOOST_REGEX_MATCH_EXTRA -g -I../../../../ -o regress ../regress/*.cpp ../../src/*.cpp ../../../test/src/ex*.cpp ../../../test/src/cpp_main.cpp + ./regress + gcov basic_tests.cpp + + + + + + diff --git a/libs/regex/test/regress/basic_tests.cpp b/libs/regex/test/regress/basic_tests.cpp new file mode 100644 index 0000000000..af19182360 --- /dev/null +++ b/libs/regex/test/regress/basic_tests.cpp @@ -0,0 +1,200 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE basic_tests.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: main regex test declarations. + */ + +#include <boost/detail/workaround.hpp> + +#if BOOST_WORKAROUND(__BORLANDC__, < 0x560) +// we get unresolved externals from basic_string +// unless we do this, a well known Borland bug: +#define _RWSTD_COMPILE_INSTANTIATE +#endif + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void basic_tests() +{ + using namespace boost::regex_constants; + TEST_REGEX_SEARCH("a", basic, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a", basic, "bba", match_default, make_array(2, 3, -2, -2)); + TEST_REGEX_SEARCH("Z", perl, "aaa", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("Z", perl, "xxxxZZxxx", match_default, make_array(4, 5, -2, 5, 6, -2, -2)); + // and some simple brackets: + TEST_REGEX_SEARCH("(a)", perl, "zzzaazz", match_default, make_array(3, 4, 3, 4, -2, 4, 5, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("()", perl, "zzz", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, 3, 3, 3, 3, -2, -2)); + TEST_REGEX_SEARCH("()", perl, "", match_default, make_array(0, 0, 0, 0, -2, -2)); + TEST_INVALID_REGEX("(", perl); + TEST_INVALID_REGEX("", perl|no_empty_expressions); + TEST_REGEX_SEARCH("", perl, "abc", match_default, make_array(0, 0, -2, 1, 1, -2, 2, 2, -2, 3, 3, -2, -2)); + TEST_INVALID_REGEX(")", perl); + TEST_INVALID_REGEX("(aa", perl); + TEST_INVALID_REGEX("aa)", perl); + TEST_REGEX_SEARCH("a", perl, "b", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\(\\)", perl, "()", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)", perl, "(a)", match_default, make_array(0, 3, -2, -2)); + TEST_INVALID_REGEX("\\()", perl); + TEST_INVALID_REGEX("(\\)", perl); + TEST_REGEX_SEARCH("p(a)rameter", perl, "ABCparameterXYZ", match_default, make_array(3, 12, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("[pq](a)rameter", perl, "ABCparameterXYZ", match_default, make_array(3, 12, 4, 5, -2, -2)); + + // now try escaped brackets: + TEST_REGEX_SEARCH("\\(a\\)", basic, "zzzaazz", match_default, make_array(3, 4, 3, 4, -2, 4, 5, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("\\(\\)", basic, "zzz", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, 3, 3, 3, 3, -2, -2)); + TEST_REGEX_SEARCH("\\(\\)", basic, "", match_default, make_array(0, 0, 0, 0, -2, -2)); + TEST_INVALID_REGEX("\\(", basic); + TEST_INVALID_REGEX("\\)", basic); + TEST_INVALID_REGEX("\\(aa", basic); + TEST_INVALID_REGEX("aa\\)", basic); + TEST_REGEX_SEARCH("()", basic, "()", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("(a)", basic, "(a)", match_default, make_array(0, 3, -2, -2)); + TEST_INVALID_REGEX("\\()", basic); + TEST_INVALID_REGEX("(\\)", basic); + TEST_REGEX_SEARCH("p\\(a\\)rameter", basic, "ABCparameterXYZ", match_default, make_array(3, 12, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("[pq]\\(a\\)rameter", basic, "ABCparameterXYZ", match_default, make_array(3, 12, 4, 5, -2, -2)); + + // now move on to "." wildcards + TEST_REGEX_SEARCH(".", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl, "\n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl, "\r", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl, "a", match_not_dot_newline, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl, "\n", match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", perl, "\r", match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", perl, "\0", match_not_dot_newline, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl, "\n", match_not_dot_null | match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", perl, "\r", match_not_dot_null | match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", perl, "\0", match_not_dot_null | match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", basic, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", basic, "\n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", basic, "\r", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", basic, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", basic, "a", match_not_dot_newline, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", basic, "\n", match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", basic, "\r", match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", basic, "\0", match_not_dot_newline, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", basic, "\n", match_not_dot_null | match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", basic, "\r", match_not_dot_null | match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", basic, "\0", match_not_dot_null | match_not_dot_newline, make_array(-2, -2)); +} + +void test_non_marking_paren() +{ + using namespace boost::regex_constants; + // + // non-marking parenthesis added 25/04/00 + // + TEST_REGEX_SEARCH("(?:abc)+", perl, "xxabcabcxx", match_default, make_array(2, 8, -2, -2)); + TEST_REGEX_SEARCH("(?:a+)(b+)", perl, "xaaabbbx", match_default, make_array(1, 7, 4, 7, -2, -2)); + TEST_REGEX_SEARCH("(a+)(?:b+)", perl, "xaaabbba", match_default, make_array(1, 7, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("(?:(a+)b+)", perl, "xaaabbba", match_default, make_array(1, 7, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("(?:a+(b+))", perl, "xaaabbba", match_default, make_array(1, 7, 4, 7, -2, -2)); + TEST_REGEX_SEARCH("a+(?#b+)b+", perl, "xaaabbba", match_default, make_array(1, 7, -2, -2)); + TEST_REGEX_SEARCH("(a)(?:b|$)", perl, "ab", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a)(?:b|$)", perl, "a", match_default, make_array(0, 1, 0, 1, -2, -2)); +} + +void test_partial_match() +{ + using namespace boost::regex_constants; + // + // try some partial matches: + // + TEST_REGEX_SEARCH("(xyz)(.*)abc", perl, "xyzaaab", match_default|match_partial, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("(xyz)(.*)abc", perl, "xyz", match_default|match_partial, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(xyz)(.*)abc", perl, "xy", match_default|match_partial, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("(xyz)(.*)abc", perl, "x", match_default|match_partial, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("(xyz)(.*)abc", perl, "", match_default|match_partial, make_array(-2, -2)); + TEST_REGEX_SEARCH("(xyz)(.*)abc", perl, "aaaa", match_default|match_partial, make_array(-2, -2)); + TEST_REGEX_SEARCH(".abc", perl, "aaab", match_default|match_partial, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("a[_]", perl, "xxa", match_default|match_partial, make_array(2, 3, -2, -2)); + TEST_REGEX_SEARCH(".{4,}", perl, "xxa", match_default|match_partial, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH(".{4,}", perl, "xxa", match_default|match_partial|match_not_dot_null, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("[\\x0-\\xff]{4,}", perl, "xxa", match_default|match_partial, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a{4,}", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\w{4,}", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH(".*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\w*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(\\w)*?<tag>", perl, "aaa", match_default|match_partial, make_array(0, 3, -2, -2)); +} + +void test_nosubs() +{ + using namespace boost::regex_constants; + // subtleties of matching with no sub-expressions marked + TEST_REGEX_SEARCH("a(b?c)+d", perl, "accd", match_default|match_nosubs, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("(wee|week)(knights|night)", perl, "weeknights", match_default|match_nosubs, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH(".*", perl, "abc", match_default|match_nosubs, make_array(0, 3, -2, 3, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", perl, "abd", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", perl, "acd", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", perl, "abbd", match_default|match_nosubs, make_array(0, 4, -2, -2)); + + TEST_REGEX_SEARCH("a(b*|c|e)d", perl, "acd", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", perl, "ad", match_default|match_nosubs, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b?)c", perl, "abc", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b?)c", perl, "ac", match_default|match_nosubs, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b+)c", perl, "abc", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b+)c", perl, "abbbc", match_default|match_nosubs, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c", perl, "ac", match_default|match_nosubs, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("(a|ab)(bc([de]+)f|cde)", perl, "abcdef", match_default|match_nosubs, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("a([bc]?)c", perl, "abc", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a([bc]?)c", perl, "ac", match_default|match_nosubs, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("a([bc]+)c", perl, "abc", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)c", perl, "abcc", match_default|match_nosubs, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)bc", perl, "abcbc", match_default|match_nosubs, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a(bb+|b)b", perl, "abb", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl, "abb", match_default|match_nosubs, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl, "abbb", match_default|match_nosubs, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)bb", perl, "abbb", match_default|match_nosubs, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("(.*).*", perl, "abcdef", match_default|match_nosubs, make_array(0, 6, -2, 6, 6, -2, -2)); + TEST_REGEX_SEARCH("(a*)*", perl, "bc", match_default|match_nosubs, make_array(0, 0, -2, 1, 1, -2, 2, 2, -2, -2)); + + TEST_REGEX_SEARCH("a(b?c)+d", perl|nosubs, "accd", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("(wee|week)(knights|night)", perl|nosubs, "weeknights", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH(".*", perl|nosubs, "abc", match_default, make_array(0, 3, -2, 3, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", perl|nosubs, "abd", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", perl|nosubs, "acd", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", perl|nosubs, "abbd", match_default, make_array(0, 4, -2, -2)); + + TEST_REGEX_SEARCH("a(b*|c|e)d", perl|nosubs, "acd", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", perl|nosubs, "ad", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b?)c", perl|nosubs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b?)c", perl|nosubs, "ac", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b+)c", perl|nosubs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b+)c", perl|nosubs, "abbbc", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c", perl|nosubs, "ac", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("(a|ab)(bc([de]+)f|cde)", perl|nosubs, "abcdef", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("a([bc]?)c", perl|nosubs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a([bc]?)c", perl|nosubs, "ac", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("a([bc]+)c", perl|nosubs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)c", perl|nosubs, "abcc", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)bc", perl|nosubs, "abcbc", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a(bb+|b)b", perl|nosubs, "abb", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl|nosubs, "abb", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl|nosubs, "abbb", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)bb", perl|nosubs, "abbb", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("(.*).*", perl|nosubs, "abcdef", match_default, make_array(0, 6, -2, 6, 6, -2, -2)); + TEST_REGEX_SEARCH("(a*)*", perl|nosubs, "bc", match_default, make_array(0, 0, -2, 1, 1, -2, 2, 2, -2, -2)); +} + + diff --git a/libs/regex/test/regress/bcb6.mak b/libs/regex/test/regress/bcb6.mak new file mode 100644 index 0000000000..319ef60beb --- /dev/null +++ b/libs/regex/test/regress/bcb6.mak @@ -0,0 +1,215 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for regress +# +# Borland C++ tools +# +# BCROOT defines the root directory of your bcb install +# +!ifndef BCROOT +BCROOT=$(MAKEDIR)\.. +!endif +# +# sources to compile for each test: +# +SOURCES=*.cpp + +BCC32 = $(BCROOT)\bin\Bcc32.exe +TLINK32 = $(BCROOT)\bin\ILink32.exe + +IDE_LinkFLAGS32 = -L$(BCROOT)\LIB +LINKOPTS= -ap -Tpe -x +CFLAGS= -tWC -DSTRICT; -Vx -Ve -w-inl -w-aus -w-csu -w-eff -w-rch -I$(BCROOT)\include;..\..\..\..\; -L..\..\..\..\stage\lib -L$(BCROOT)\lib\obj -L$(BCROOT)\lib\release -L..\..\build\bcb $(CXXFLAGS) + +BPI= vcl.bpi rtl.bpi vclx.bpi vcle.lib + +BPL= vcl.lib rtl.lib vcle.lib + + +all :: r1.exe r2.exe r3.exe r4.exe r5.exe r6.exe r1m.exe r2m.exe r3m.exe r4m.exe r5m.exe r6m.exe r1v.exe r2v.exe r3v.exe r4v.exe r5v.exe r6v.exe r1l.exe r2l.exe r3l.exe r4l.exe r5l.exe r6l.exe r1lm.exe r2lm.exe r3lm.exe r4lm.exe r5lm.exe r6lm.exe r1lv.exe r2lv.exe r3lv.exe r4lv.exe r5lv.exe r6lv.exe + -copy ..\..\build\bcb6\*.dll + -copy ..\..\..\..\stage\lib\*bcb*.dll + echo testing static single threaded version.... + r1 tests.txt test1252.txt + r2 tests.txt + r3 tests.txt + r4 tests.txt test1252.txt + r5 tests.txt + r6 tests.txt + echo testing static multi-threaded version.... + r1m tests.txt test1252.txt + r2m tests.txt + r3m tests.txt + r4m tests.txt test1252.txt + r5m tests.txt + r6m tests.txt + echo testing static VCL version.... + r1v tests.txt test1252.txt + r2v tests.txt + r3v tests.txt + r4v tests.txt test1252.txt + r5v tests.txt + r6v tests.txt + echo testing dll single threaded version.... + r1l tests.txt test1252.txt + r2l tests.txt + r3l tests.txt + r4l tests.txt test1252.txt + r5l tests.txt + r6l tests.txt + echo testing dll multi-threaded version.... + r1lm tests.txt test1252.txt + r2lm tests.txt + r3lm tests.txt + r4lm tests.txt test1252.txt + r5lm tests.txt + r6lm tests.txt + echo testing dll VCL version.... + r1lv tests.txt test1252.txt + r2lv tests.txt + r3lv tests.txt + r4lv tests.txt test1252.txt + r5lv tests.txt + r6lv tests.txt + + +r1.exe : $(SOURCES) + $(BCC32) -tWM- -D_NO_VCL $(CFLAGS) -er1.exe -DBOOST_RE_TEST_LOCALE_W32 $(SOURCES) + +r2.exe : $(SOURCES) + $(BCC32) -tWM- -D_NO_VCL $(CFLAGS) -er2.exe -DBOOST_RE_TEST_LOCALE_C $(SOURCES) + +r3.exe : $(SOURCES) + $(BCC32) -tWM- -D_NO_VCL $(CFLAGS) -er3.exe -DBOOST_RE_TEST_LOCALE_CPP $(SOURCES) + +r4.exe : $(SOURCES) + $(BCC32) -tWM- -D_NO_VCL $(CFLAGS) -er4.exe -DBOOST_RE_TEST_LOCALE_W32 -DTEST_UNICODE $(SOURCES) + +r5.exe : $(SOURCES) + $(BCC32) -tWM- -D_NO_VCL $(CFLAGS) -er5.exe -DBOOST_RE_TEST_LOCALE_C -DTEST_UNICODE $(SOURCES) + +r6.exe : $(SOURCES) + $(BCC32) -tWM- -D_NO_VCL $(CFLAGS) -er6.exe -DBOOST_RE_TEST_LOCALE_CPP -DTEST_UNICODE $(SOURCES) + + +r1m.exe : $(SOURCES) + $(BCC32) -tWM -D_NO_VCL $(CFLAGS) -er1m.exe -DBOOST_RE_TEST_LOCALE_W32 $(SOURCES) + +r2m.exe : $(SOURCES) + $(BCC32) -tWM -D_NO_VCL $(CFLAGS) -er2m.exe -DBOOST_RE_TEST_LOCALE_C $(SOURCES) + +r3m.exe : $(SOURCES) + $(BCC32) -tWM -D_NO_VCL $(CFLAGS) -er3m.exe -DBOOST_RE_TEST_LOCALE_CPP $(SOURCES) + +r4m.exe : $(SOURCES) + $(BCC32) -tWM -D_NO_VCL $(CFLAGS) -er4m.exe -DBOOST_RE_TEST_LOCALE_W32 -DTEST_UNICODE $(SOURCES) + +r5m.exe : $(SOURCES) + $(BCC32) -tWM -D_NO_VCL $(CFLAGS) -er5m.exe -DBOOST_RE_TEST_LOCALE_C -DTEST_UNICODE $(SOURCES) + +r6m.exe : $(SOURCES) + $(BCC32) -tWM -D_NO_VCL $(CFLAGS) -er6m.exe -DBOOST_RE_TEST_LOCALE_CPP -DTEST_UNICODE $(SOURCES) + + +r1v.exe : $(SOURCES) + $(BCC32) -tWM -tWV $(CFLAGS) -er1v.exe -DBOOST_RE_TEST_LOCALE_W32 $(SOURCES) $(BPL) + +r2v.exe : $(SOURCES) + $(BCC32) -tWM -tWV $(CFLAGS) -er2v.exe -DBOOST_RE_TEST_LOCALE_C $(SOURCES) $(BPL) + +r3v.exe : $(SOURCES) + $(BCC32) -tWM -tWV $(CFLAGS) -er3v.exe -DBOOST_RE_TEST_LOCALE_CPP $(SOURCES) $(BPL) + +r4v.exe : $(SOURCES) + $(BCC32) -tWM -tWV $(CFLAGS) -er4v.exe -DBOOST_RE_TEST_LOCALE_W32 -DTEST_UNICODE $(SOURCES) $(BPL) + +r5v.exe : $(SOURCES) + $(BCC32) -tWM -tWV $(CFLAGS) -er5v.exe -DBOOST_RE_TEST_LOCALE_C -DTEST_UNICODE $(SOURCES) $(BPL) + +r6v.exe : $(SOURCES) + $(BCC32) -tWM -tWV $(CFLAGS) -er6v.exe -DBOOST_RE_TEST_LOCALE_CPP -DTEST_UNICODE $(SOURCES) $(BPL) + + +r1l.exe : $(SOURCES) + $(BCC32) -tWM- -tWR -D_NO_VCL $(CFLAGS) -er1l.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_W32 $(SOURCES) + +r2l.exe : $(SOURCES) + $(BCC32) -tWM- -tWR -D_NO_VCL $(CFLAGS) -er2l.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_C $(SOURCES) + +r3l.exe : $(SOURCES) + $(BCC32) -tWM- -tWR -D_NO_VCL $(CFLAGS) -er3l.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_CPP $(SOURCES) + +r4l.exe : $(SOURCES) + $(BCC32) -tWM- -tWR -D_NO_VCL $(CFLAGS) -er4l.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_W32 -DTEST_UNICODE $(SOURCES) + +r5l.exe : $(SOURCES) + $(BCC32) -tWM- -tWR -D_NO_VCL $(CFLAGS) -er5l.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_C -DTEST_UNICODE $(SOURCES) + +r6l.exe : $(SOURCES) + $(BCC32) -tWM- -tWR -D_NO_VCL $(CFLAGS) -er6l.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_CPP -DTEST_UNICODE $(SOURCES) + + +r1lm.exe : $(SOURCES) + $(BCC32) -tWM -tWR -D_NO_VCL $(CFLAGS) -er1lm.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_W32 $(SOURCES) + +r2lm.exe : $(SOURCES) + $(BCC32) -tWM -tWR -D_NO_VCL $(CFLAGS) -er2lm.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_C $(SOURCES) + +r3lm.exe : $(SOURCES) + $(BCC32) -tWM -tWR -D_NO_VCL $(CFLAGS) -er3lm.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_CPP $(SOURCES) + +r4lm.exe : $(SOURCES) + $(BCC32) -tWM -tWR -D_NO_VCL $(CFLAGS) -er4lm.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_W32 -DTEST_UNICODE $(SOURCES) + +r5lm.exe : $(SOURCES) + $(BCC32) -tWM -tWR -D_NO_VCL $(CFLAGS) -er5lm.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_C -DTEST_UNICODE $(SOURCES) + +r6lm.exe : $(SOURCES) + $(BCC32) -tWM -tWR -D_NO_VCL $(CFLAGS) -er6lm.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_CPP -DTEST_UNICODE $(SOURCES) + + +r1lv.exe : $(SOURCES) + $(BCC32) -tWM -tWR -tWV -tWC $(CFLAGS) -er1lv.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_W32 $(SOURCES) $(BPI) + +r2lv.exe : $(SOURCES) + $(BCC32) -tWM -tWR -tWV -tWC $(CFLAGS) -er2lv.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_C $(SOURCES) $(BPI) + +r3lv.exe : $(SOURCES) + $(BCC32) -tWM -tWR -tWV -tWC $(CFLAGS) -er3lv.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_CPP $(SOURCES) $(BPI) + +r4lv.exe : $(SOURCES) + $(BCC32) -tWM -tWR -tWV -tWC $(CFLAGS) -er4lv.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_W32 -DTEST_UNICODE $(SOURCES) $(BPI) + +r5lv.exe : $(SOURCES) + $(BCC32) -tWM -tWR -tWV -tWC $(CFLAGS) -er5lv.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_C -DTEST_UNICODE $(SOURCES) $(BPI) + +r6lv.exe : $(SOURCES) + $(BCC32) -tWM -tWR -tWV -tWC $(CFLAGS) -er6lv.exe -DBOOST_REGEX_DYN_LINK -DBOOST_RE_TEST_LOCALE_CPP -DTEST_UNICODE $(SOURCES) $(BPI) + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/regex/test/regress/gcc.mak b/libs/regex/test/regress/gcc.mak new file mode 100644 index 0000000000..83b2ea3b99 --- /dev/null +++ b/libs/regex/test/regress/gcc.mak @@ -0,0 +1,74 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for regression tests +# +# g++ 2.95 and greater +# +CXX= g++ $(INCLUDES) -L../../../../stage/lib -I../../../../ -I./ $(CXXFLAGS) -L../../build/gcc $(LDFLAGS) +# +# sources to compile for each test: +# +SOURCES=*.cpp + +total : gcc_regress + export LD_LIBRARY_PATH="../../build/gcc:$LD_LIBRARY_PATH" && ./gcc_regress tests.txt + +gcc_regress : $(SOURCES) + $(CXX) -O2 -o gcc_regress $(SOURCES) ../../build/gcc/libboost_regex-gcc*.a $(LIBS) + +debug : $(SOURCES) + $(CXX) -g -o gcc_regress $(SOURCES) ../../build/gcc/libboost_regex-gcc-d*.a $(LIBS) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/regex/test/regress/info.hpp b/libs/regex/test/regress/info.hpp new file mode 100644 index 0000000000..4fa55afa25 --- /dev/null +++ b/libs/regex/test/regress/info.hpp @@ -0,0 +1,222 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE info.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Error handling for test cases. + */ + +#ifndef BOOST_REGEX_REGRESS_INFO_HPP +#define BOOST_REGEX_REGRESS_INFO_HPP +#include <iostream> +#include <string> +#include <boost/regex.hpp> + +#ifdef TEST_THREADS +#include <boost/thread/once.hpp> +#include <boost/thread.hpp> +#endif +// +// class test info, +// store information about the test we are about to conduct: +// +template <class charT> +class test_info_base +{ +public: + typedef std::basic_string<charT> string_type; +private: + struct data_type + { + std::string file; + int line; + string_type expression; + boost::regex_constants::syntax_option_type options; + string_type search_text; + boost::regex_constants::match_flag_type match_options; + const int* answer_table; + string_type format_string; + string_type result_string; + bool need_to_print; + std::string expression_type_name; + }; +#ifdef TEST_THREADS + static data_type& do_get_data() + { + static boost::thread_specific_ptr<data_type> pd; + if(pd.get() == 0) + pd.reset(new data_type()); + return *(pd.get()); + } + static void init_data() + { + do_get_data(); + } +#endif + static data_type& data() + { +#ifdef TEST_THREADS + static boost::once_flag f = BOOST_ONCE_INIT; + boost::call_once(f,&init_data); + return do_get_data(); +#else + static data_type d; + return d; +#endif + } +public: + test_info_base(){}; + static void set_info( + const char* file, + int line, + const string_type& ex, + boost::regex_constants::syntax_option_type opt, + const string_type& search_text = string_type(), + boost::regex_constants::match_flag_type match_options = boost::match_default, + const int* answer_table = 0, + const string_type& format_string = string_type(), + const string_type& result_string = string_type()) + { + data_type& dat = data(); + dat.file = file; + dat.line = line; + dat.expression = ex; + dat.options = opt; + dat.search_text = search_text; + dat.match_options = match_options; + dat.answer_table = answer_table; + dat.format_string = format_string; + dat.result_string = result_string; + dat.need_to_print = true; + } + static void set_typename(const std::string& n) + { + data().expression_type_name = n; + } + + static const string_type& expression() + { + return data().expression; + } + static boost::regex_constants::syntax_option_type syntax_options() + { + return data().options; + } + static const string_type& search_text() + { + return data().search_text; + } + static boost::regex_constants::match_flag_type match_options() + { + return data().match_options; + } + static const int* answer_table() + { + return data().answer_table; + } + static const string_type& format_string() + { + return data().format_string; + } + static const string_type& result_string() + { + return data().result_string; + } + static bool need_to_print() + { + return data().need_to_print; + } + static const std::string& file() + { + return data().file; + } + static int line() + { + return data().line; + } + static void clear() + { + data().need_to_print = false; + } + static std::string& expression_typename() + { + return data().expression_type_name; + } +}; + +template <class T> +struct test_info + : public test_info_base<wchar_t> +{}; + +template<> +struct test_info<char> + : public test_info_base<char> +{}; + +#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) + +// Some template instantiation modes (namely local, implicit local, and weak) of +// this compiler need an explicit instantiation because otherwise we end up with +// multiple copies of the static variable defined in this method. This explicit +// instantiation generates the static variable with common linkage, which makes +// the linker choose only one of the available definitions. For more details, +// see "man ld". + +template test_info_base<wchar_t>::data_type & test_info_base<wchar_t>::data(); +template test_info_base<char>::data_type & test_info_base<char>::data(); + +#endif + +template <class charT> +std::ostream& operator<<(std::ostream& os, const test_info<charT>&) +{ + if(test_info<charT>::need_to_print()) + { + os << test_info<charT>::file() << ":" << test_info<charT>::line() << ": Error in test here:" << std::endl; + test_info<charT>::clear(); + } + return os; +} +// +// define some test macros: +// +extern int error_count; + +#define BOOST_REGEX_TEST_ERROR(msg, charT)\ + ++error_count;\ + std::cerr << test_info<charT>();\ + std::cerr << " " << __FILE__ << ":" << __LINE__ << ":" << msg \ + << " (While testing " << test_info<charT>::expression_typename() << ")" << std::endl + +class errors_as_warnings +{ +public: + errors_as_warnings() + { + m_saved_error_count = error_count; + } + ~errors_as_warnings() + { + if(m_saved_error_count != error_count) + { + std::cerr << "<note>The above " << (error_count - m_saved_error_count) << " errors are treated as warnings only.</note>" << std::endl; + error_count = m_saved_error_count; + } + } +private: + int m_saved_error_count; +}; + +#endif + diff --git a/libs/regex/test/regress/main.cpp b/libs/regex/test/regress/main.cpp new file mode 100644 index 0000000000..0fcd09217d --- /dev/null +++ b/libs/regex/test/regress/main.cpp @@ -0,0 +1,240 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE main.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: entry point for test program. + */ + +#include "test.hpp" +#include "test_locale.hpp" +#include <stdarg.h> + +#ifdef BOOST_HAS_ICU +#include <unicode/uloc.h> +#endif + +#ifdef TEST_THREADS +#include <list> +#include <boost/thread.hpp> +#include <boost/thread/tss.hpp> +#include <boost/shared_ptr.hpp> +#include <boost/array.hpp> + +int* get_array_data(); + +#endif + +int error_count = 0; + +#ifndef TEST_THREADS +#define RUN_TESTS(name) \ + std::cout << "Running test case \"" #name "\".\n";\ + name(); +#else +#define RUN_TESTS(name) \ + name(); +#endif + + +void run_tests() +{ + RUN_TESTS(basic_tests); + RUN_TESTS(test_simple_repeats); + RUN_TESTS(test_alt); + RUN_TESTS(test_sets); + RUN_TESTS(test_sets2); + RUN_TESTS(test_anchors); + RUN_TESTS(test_backrefs); + RUN_TESTS(test_character_escapes); + RUN_TESTS(test_assertion_escapes); + RUN_TESTS(test_tricky_cases); + RUN_TESTS(test_grep); + RUN_TESTS(test_replace); + RUN_TESTS(test_non_greedy_repeats); + RUN_TESTS(test_non_marking_paren); + RUN_TESTS(test_partial_match); + RUN_TESTS(test_forward_lookahead_asserts); + RUN_TESTS(test_fast_repeats); + RUN_TESTS(test_fast_repeats2); + RUN_TESTS(test_independent_subs); + RUN_TESTS(test_nosubs); + RUN_TESTS(test_conditionals); + RUN_TESTS(test_options); + RUN_TESTS(test_options2); +#ifndef TEST_THREADS + RUN_TESTS(test_en_locale); +#endif + RUN_TESTS(test_emacs); + RUN_TESTS(test_operators); + RUN_TESTS(test_overloads); + RUN_TESTS(test_unicode); + RUN_TESTS(test_pocessive_repeats); + RUN_TESTS(test_mark_resets); + RUN_TESTS(test_recursion); +} + +int cpp_main(int /*argc*/, char * /*argv*/[]) +{ +#ifdef BOOST_HAS_ICU + // + // We need to set the default locale used by ICU, + // otherwise some of our tests using equivalence classes fail. + // + UErrorCode err = U_ZERO_ERROR; + uloc_setDefault("en", &err); + if(err != U_ZERO_ERROR) + { + std::cerr << "Unable to set the default ICU locale to \"en\"." << std::endl; + return -1; + } +#endif +#ifdef TEST_THREADS + try{ + get_array_data(); // initialises data. + } + catch(const std::exception& e) + { + std::cerr << "TSS Initialisation failed with message: " << e.what() << std::endl; + return -1; + } + + std::list<boost::shared_ptr<boost::thread> > threads; + for(int i = 0; i < 5; ++i) + { + try{ + threads.push_back(boost::shared_ptr<boost::thread>(new boost::thread(&run_tests))); + } + catch(const std::exception& e) + { + std::cerr << "<note>Thread creation failed with message: " << e.what() << "</note>" << std::endl; + } + } + std::list<boost::shared_ptr<boost::thread> >::const_iterator a(threads.begin()), b(threads.end()); + while(a != b) + { + (*a)->join(); + ++a; + } +#else + run_tests(); +#endif + return error_count; +} + +#ifdef TEST_THREADS + +int* get_array_data() +{ + static boost::thread_specific_ptr<boost::array<int, 200> > tp; + + if(tp.get() == 0) + tp.reset(new boost::array<int, 200>); + + return tp.get()->data(); +} + +#endif + +const int* make_array(int first, ...) +{ + // + // this function takes a variable number of arguments + // and packs them into an array that we can pass through + // our testing macros (ideally we would use an array literal + // but these can't apparently be used as macro arguments). + // +#ifdef TEST_THREADS + int* data = get_array_data(); +#else + static int data[200]; +#endif + va_list ap; + va_start(ap, first); + // + // keep packing args, until we get two successive -2 values: + // + int terminator_count; + int next_position = 1; + data[0] = first; + if(first == -2) + terminator_count = 1; + else + terminator_count = 0; + while(terminator_count < 2) + { + data[next_position] = va_arg(ap, int); + if(data[next_position] == -2) + ++terminator_count; + else + terminator_count = 0; + ++next_position; + } + va_end(ap); + return data; +} + +#ifdef BOOST_NO_EXCEPTIONS + +namespace boost{ + +void throw_exception(std::exception const & e) +{ + std::abort(); +} + +} + +#endif + +void test(const char& c, const test_regex_replace_tag& tag) +{ + do_test(c, tag); +} +void test(const char& c, const test_regex_search_tag& tag) +{ + do_test(c, tag); +} +void test(const char& c, const test_invalid_regex_tag& tag) +{ + do_test(c, tag); +} + +#ifndef BOOST_NO_WREGEX +void test(const wchar_t& c, const test_regex_replace_tag& tag) +{ + do_test(c, tag); +} +void test(const wchar_t& c, const test_regex_search_tag& tag) +{ + do_test(c, tag); +} +void test(const wchar_t& c, const test_invalid_regex_tag& tag) +{ + do_test(c, tag); +} +#endif + +#ifdef BOOST_NO_EXCETIONS +namespace boost{ + +void throw_exception( std::exception const & e ) +{ + std::cerr << e.what() << std::endl; + std::exit(1); +} + +} +#endif + +#include <boost/test/included/prg_exec_monitor.hpp> diff --git a/libs/regex/test/regress/sunpro.mak b/libs/regex/test/regress/sunpro.mak new file mode 100644 index 0000000000..828a64817b --- /dev/null +++ b/libs/regex/test/regress/sunpro.mak @@ -0,0 +1,145 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for regression tests +# tests every library combination, static/dynamic/multimthread/singlethread/narrow/wide +# +# Sun Workshop 6 and greater: +# +CXX= CC $(INCLUDES) -I../../../../ -I./ $(CXXFLAGS) -L../../../../stage/lib -L../../build/sunpro $(LDFLAGS) +# +# sources to compile for each test: +# +SOURCES=*.cpp + +total : r rm r/regress rm/regress rs rms rs/regress rms/regress rw rmw rw/regress rmw/regress rsw rmsw rsw/regress rmsw/regress + echo testsing narrow character versions: + ./r/regress tests.txt + ./rm/regress tests.txt + ./rs/regress tests.txt + ./rms/regress tests.txt + echo testsing wide character versions; + ./rw/regress tests.txt + ./rmw/regress tests.txt + ./rsw/regress tests.txt + ./rmsw/regress tests.txt + +# +# delete the cache before each build. +# NB this precludes multithread builds: +# +r/regress : $(SOURCES) + rm -f *.o + rm -fr SunWS_cache + $(CXX) -O2 -o r/regress $(SOURCES) -lboost_regex$(LIBSUFFIX) $(LIBS) + +rm/regress : $(SOURCES) + rm -f *.o + rm -fr SunWS_cache + $(CXX) -O2 -mt -o rm/regress $(SOURCES) -lboost_regex_mt$(LIBSUFFIX) $(LIBS) + +rs/regress : $(SOURCES) + rm -f *.o + rm -fr SunWS_cache + $(CXX) -O2 -o rs/regress $(SOURCES) -Bstatic -lboost_regex$(LIBSUFFIX) -Bdynamic $(LIBS) + +rms/regress : $(SOURCES) + rm -f *.o + rm -fr SunWS_cache + $(CXX) -O2 -mt -o rms/regress $(SOURCES) -Bstatic -lboost_regex_mt$(LIBSUFFIX) -Bdynamic $(LIBS) + +rw/regress : $(SOURCES) + rm -f *.o + rm -fr SunWS_cache + $(CXX) -O2 -DTEST_UNICODE -o rw/regress $(SOURCES) -lboost_regex$(LIBSUFFIX) $(LIBS) + +rmw/regress : $(SOURCES) + rm -f *.o + rm -fr SunWS_cache + $(CXX) -O2 -mt -DTEST_UNICODE -o rmw/regress $(SOURCES) -lboost_regex_mt$(LIBSUFFIX) $(LIBS) + +rsw/regress : $(SOURCES) + rm -f *.o + rm -fr SunWS_cache + $(CXX) -O2 -DTEST_UNICODE -o rsw/regress $(SOURCES) -Bstatic -lboost_regex$(LIBSUFFIX) -Bdynamic $(LIBS) + +rmsw/regress : $(SOURCES) + rm -f *.o + rm -fr SunWS_cache + $(CXX) -O2 -mt -DTEST_UNICODE -o rmsw/regress $(SOURCES) -Bstatic -lboost_regex_mt$(LIBSUFFIX) -Bdynamic $(LIBS) + +r: + mkdir -p r + +rm: + mkdir -p rm + +rs: + mkdir -p rs + +rms: + mkdir -p rms + +rw: + mkdir -p rw + +rmw: + mkdir -p rmw + +rsw: + mkdir -p rsw + +rmsw: + mkdir -p rmsw + +clean: + rm -f *.o + rm -fr SunWS_cache + rm -fr r rm rs rms rw rmw rsw rmsw + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/regex/test/regress/test.hpp b/libs/regex/test/regress/test.hpp new file mode 100644 index 0000000000..e93ac5ecb9 --- /dev/null +++ b/libs/regex/test/regress/test.hpp @@ -0,0 +1,292 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Macros for test cases. + */ + + +#ifndef BOOST_REGEX_REGRESS_TEST_HPP +#define BOOST_REGEX_REGRESS_TEST_HPP + +#include <boost/regex.hpp> + +#ifdef BOOST_INTEL +// disable Intel's "remarks": +#pragma warning(disable:1418 981 383 1419 7) +#endif + +#include <typeinfo> +#include "test_not_regex.hpp" +#include "test_regex_search.hpp" +#include "test_regex_replace.hpp" +#include "test_deprecated.hpp" +#include "test_mfc.hpp" +#include "test_icu.hpp" +#include "test_locale.hpp" + +#ifdef TEST_THREADS +#include <boost/thread/once.hpp> +#endif + +// +// define test entry proc, this forwards on to the appropriate +// real test: +// +template <class charT, class tagT> +void do_test(const charT& c, const tagT& tag); + +template <class charT, class tagT> +void test(const charT& c, const tagT& tag) +{ + do_test(c, tag); +} +// +// make these non-templates to speed up compilation times: +// +void test(const char&, const test_regex_replace_tag&); +void test(const char&, const test_regex_search_tag&); +void test(const char&, const test_invalid_regex_tag&); + +#ifndef BOOST_NO_WREGEX +void test(const wchar_t&, const test_regex_replace_tag&); +void test(const wchar_t&, const test_regex_search_tag&); +void test(const wchar_t&, const test_invalid_regex_tag&); +#endif + +template <class Regex> +struct call_once_func +{ + Regex* pregex; + void operator()()const + { + return test_empty(*pregex); + } +}; + +template <class charT, class tagT> +void do_test(const charT& c, const tagT& tag) +{ +#ifndef BOOST_NO_STD_LOCALE +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) && defined(TEST_THREADS) + // typeid appears to fail in multithreaded environments: + test_info<charT>::set_typename(""); +#else + test_info<charT>::set_typename(typeid(boost::basic_regex<charT, boost::cpp_regex_traits<charT> >).name()); +#endif + boost::basic_regex<charT, boost::cpp_regex_traits<charT> > e1; +#ifndef TEST_THREADS + static bool done_empty_test = false; + if(done_empty_test == false) + { + test_empty(e1); + done_empty_test = true; + } +#else + boost::once_flag f = BOOST_ONCE_INIT; + call_once_func<boost::basic_regex<charT, boost::cpp_regex_traits<charT> > > proc = { &e1 }; + boost::call_once(f, proc); +#endif + if(test_locale::cpp_locale_state() == test_locale::test_with_locale) + e1.imbue(test_locale::cpp_locale()); + if(test_locale::cpp_locale_state() != test_locale::no_test) + test(e1, tag); +#endif +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) && defined(TEST_THREADS) + // typeid appears to fail in multithreaded environments: + test_info<charT>::set_typename(""); +#else + test_info<charT>::set_typename(typeid(boost::basic_regex<charT, boost::c_regex_traits<charT> >).name()); +#endif + boost::basic_regex<charT, boost::c_regex_traits<charT> > e2; + if(test_locale::c_locale_state() != test_locale::no_test) + test(e2, tag); +#endif +#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) && defined(TEST_THREADS) + // typeid appears to fail in multithreaded environments: + test_info<charT>::set_typename(""); +#else + test_info<charT>::set_typename(typeid(boost::basic_regex<charT, boost::w32_regex_traits<charT> >).name()); +#endif + boost::basic_regex<charT, boost::w32_regex_traits<charT> > e3; + if(test_locale::win_locale_state() == test_locale::test_with_locale) + e3.imbue(test_locale::win_locale()); + if(test_locale::win_locale_state() != test_locale::no_test) + test(e3, tag); +#endif + // test old depecated code: + test_info<charT>::set_typename("Deprecated interfaces"); + if((test_locale::win_locale_state() == test_locale::test_no_locale) + && (test_locale::c_locale_state() == test_locale::test_no_locale) + &&(test_locale::cpp_locale_state() == test_locale::test_no_locale)) + test_deprecated(c, tag); + // test MFC/ATL wrappers: + test_info<charT>::set_typename("MFC/ATL interfaces"); + if((test_locale::win_locale_state() == test_locale::test_no_locale) + && (test_locale::c_locale_state() == test_locale::test_no_locale) + &&(test_locale::cpp_locale_state() == test_locale::test_no_locale)) + test_mfc(c, tag); + // test ICU code: + test_info<charT>::set_typename("ICU interfaces"); + test_icu(c, tag); +} + +// +// define function to pack args into an array: +// +const int* make_array(int first, ...); + + +// +// define macros for testing invalid regexes: +// +#define TEST_INVALID_REGEX_N(s, f)\ + do{\ + const char e[] = { s };\ + std::string se(e, sizeof(e) - 1);\ + test_info<char>::set_info(__FILE__, __LINE__, se, f);\ + test(char(0), test_invalid_regex_tag());\ + }while(0) + +#ifndef BOOST_NO_WREGEX +#define TEST_INVALID_REGEX_W(s, f)\ + do{\ + const wchar_t e[] = { s };\ + std::wstring se(e, (sizeof(e) / sizeof(wchar_t)) - 1);\ + test_info<wchar_t>::set_info(__FILE__, __LINE__, se, f);\ + test(wchar_t(0), test_invalid_regex_tag());\ + }while(0) +#else +#define TEST_INVALID_REGEX_W(s, f) +#endif + +#define TEST_INVALID_REGEX(s, f)\ + TEST_INVALID_REGEX_N(s, f);\ + TEST_INVALID_REGEX_W(BOOST_JOIN(L, s), f) + +// +// define macros for testing regex searches: +// +#define TEST_REGEX_SEARCH_N(s, f, t, m, a)\ + do{\ + const char e[] = { s };\ + std::string se(e, sizeof(e) - 1);\ + const char st[] = { t };\ + std::string sst(st, sizeof(st) - 1);\ + test_info<char>::set_info(__FILE__, __LINE__, se, f, sst, m, a);\ + test(char(0), test_regex_search_tag());\ + }while(0) + +#ifndef BOOST_NO_WREGEX +#define TEST_REGEX_SEARCH_W(s, f, t, m, a)\ + do{\ + const wchar_t e[] = { s };\ + std::wstring se(e, (sizeof(e) / sizeof(wchar_t)) - 1);\ + const wchar_t st[] = { t };\ + std::wstring sst(st, (sizeof(st) / sizeof(wchar_t)) - 1);\ + test_info<wchar_t>::set_info(__FILE__, __LINE__, se, f, sst, m, a);\ + test(wchar_t(0), test_regex_search_tag());\ + }while(0) +#else +#define TEST_REGEX_SEARCH_W(s, f, t, m, a) +#endif + +#define TEST_REGEX_SEARCH(s, f, t, m, a)\ + TEST_REGEX_SEARCH_N(s, f, t, m, a);\ + TEST_REGEX_SEARCH_W(BOOST_JOIN(L, s), f, BOOST_JOIN(L, t), m, a) + +#if (defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)) +#define TEST_REGEX_SEARCH_L(s, f, t, m, a) TEST_REGEX_SEARCH_W(BOOST_JOIN(L, s), f, BOOST_JOIN(L, t), m, a) +#else +#define TEST_REGEX_SEARCH_L(s, f, t, m, a) TEST_REGEX_SEARCH(s, f, t, m, a) +#endif + +// +// define macros for testing regex replaces: +// +#define TEST_REGEX_REPLACE_N(s, f, t, m, fs, r)\ + do{\ + const char e[] = { s };\ + std::string se(e, sizeof(e) - 1);\ + const char st[] = { t };\ + std::string sst(st, sizeof(st) - 1);\ + const char ft[] = { fs };\ + std::string sft(ft, sizeof(ft) - 1);\ + const char rt[] = { r };\ + std::string srt(rt, sizeof(rt) - 1);\ + test_info<char>::set_info(__FILE__, __LINE__, se, f, sst, m, 0, sft, srt);\ + test(char(0), test_regex_replace_tag());\ + }while(0) + +#ifndef BOOST_NO_WREGEX +#define TEST_REGEX_REPLACE_W(s, f, t, m, fs, r)\ + do{\ + const wchar_t e[] = { s };\ + std::wstring se(e, (sizeof(e) / sizeof(wchar_t)) - 1);\ + const wchar_t st[] = { t };\ + std::wstring sst(st, (sizeof(st) / sizeof(wchar_t)) - 1);\ + const wchar_t ft[] = { fs };\ + std::wstring sft(ft, (sizeof(ft) / sizeof(wchar_t)) - 1);\ + const wchar_t rt[] = { r };\ + std::wstring srt(rt, (sizeof(rt) / sizeof(wchar_t)) - 1);\ + test_info<wchar_t>::set_info(__FILE__, __LINE__, se, f, sst, m, 0, sft, srt);\ + test(wchar_t(0), test_regex_replace_tag());\ + }while(0) +#else +#define TEST_REGEX_REPLACE_W(s, f, t, m, fs, r) +#endif + +#define TEST_REGEX_REPLACE(s, f, t, m, fs, r)\ + TEST_REGEX_REPLACE_N(s, f, t, m, fs, r);\ + TEST_REGEX_REPLACE_W(BOOST_JOIN(L, s), f, BOOST_JOIN(L, t), m, BOOST_JOIN(L, fs), BOOST_JOIN(L, r)) + +// +// define the test group proceedures: +// +void basic_tests(); +void test_simple_repeats(); +void test_alt(); +void test_sets(); +void test_sets2(); +void test_anchors(); +void test_backrefs(); +void test_character_escapes(); +void test_assertion_escapes(); +void test_tricky_cases(); +void test_grep(); +void test_replace(); +void test_non_greedy_repeats(); +void test_non_marking_paren(); +void test_partial_match(); +void test_forward_lookahead_asserts(); +void test_fast_repeats(); +void test_fast_repeats2(); +void test_tricky_cases2(); +void test_independent_subs(); +void test_nosubs(); +void test_conditionals(); +void test_options(); +void test_options2(); +void test_en_locale(); +void test_emacs(); +void test_operators(); +void test_overloads(); +void test_unicode(); +void test_pocessive_repeats(); +void test_mark_resets(); +void test_recursion(); + +#endif diff --git a/libs/regex/test/regress/test_alt.cpp b/libs/regex/test/regress/test_alt.cpp new file mode 100644 index 0000000000..7eb187fc08 --- /dev/null +++ b/libs/regex/test/regress/test_alt.cpp @@ -0,0 +1,55 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_alt() +{ + using namespace boost::regex_constants; + // now test the alternation operator | + TEST_REGEX_SEARCH("a|b", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a|b", perl, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a|b|c", perl, "c", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a|(b)|.", perl, "b", match_default, make_array(0, 1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a)|b|.", perl, "a", match_default, make_array(0, 1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)", perl, "ab", match_default, make_array(0, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)", perl, "ac", match_default, make_array(0, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)", perl, "ad", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a|b|c)", perl, "c", match_default, make_array(0, 1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a|(b)|.)", perl, "b", match_default, make_array(0, 1, 0, 1, 0, 1, -2, -2)); + TEST_INVALID_REGEX("|c", perl|no_empty_expressions); + TEST_REGEX_SEARCH("|c", perl, " c", match_default, make_array(0, 0, -2, 1, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_INVALID_REGEX("c|", perl|no_empty_expressions); + TEST_REGEX_SEARCH("c|", perl, " c", match_default, make_array(0, 0, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_INVALID_REGEX("(|)", perl|no_empty_expressions); + TEST_REGEX_SEARCH("(|)", perl, " c", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, -2)); + TEST_INVALID_REGEX("(a|)", perl|no_empty_expressions); + TEST_REGEX_SEARCH("(a|)", perl, " a", match_default, make_array(0, 0, 0, 0, -2, 1, 2, 1, 2, -2, 2, 2, 2, 2, -2, -2)); + TEST_INVALID_REGEX("(|a)", perl|no_empty_expressions); + TEST_REGEX_SEARCH("(|a)", perl, " a", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 1, 2, 1, 2, -2, 2, 2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\|", perl, "a|", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("a|", basic, "a|", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\|", basic, "a|", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("|", basic, "|", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a|", basic|bk_vbar, "a|", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\|b", basic|bk_vbar, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\|b", basic|bk_vbar, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\nb", grep, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\nb", grep, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\nb", egrep, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\nb", egrep, "a", match_default, make_array(0, 1, -2, -2)); +} + diff --git a/libs/regex/test/regress/test_anchors.cpp b/libs/regex/test/regress/test_anchors.cpp new file mode 100644 index 0000000000..b2aabdfd72 --- /dev/null +++ b/libs/regex/test/regress/test_anchors.cpp @@ -0,0 +1,67 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_anchors() +{ + // line anchors: + using namespace boost::regex_constants; + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "xxabxx", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "xx\nabzz", match_default, make_array(3, 5, -2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "abxx", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "ab\nzz", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "\n\n a", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("^ab", basic, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^ab", basic, "xxabxx", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ab", basic, "xx\nabzz", match_default, make_array(3, 5, -2, -2)); + TEST_REGEX_SEARCH("ab$", basic, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab$", basic, "abxx", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", basic, "ab\nzz", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "ab", match_default | match_not_bol | match_not_eol, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "xxabxx", match_default | match_not_bol | match_not_eol, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "xx\nabzz", match_default | match_not_bol | match_not_eol, make_array(3, 5, -2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "ab", match_default | match_not_bol | match_not_eol, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "abxx", match_default | match_not_bol | match_not_eol, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "ab\nzz", match_default | match_not_bol | match_not_eol, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "ab", match_default | match_single_line, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "xxabxx", match_default | match_single_line, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "xx\nabzz", match_default | match_single_line, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "ab", match_default | match_single_line, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "abxx", match_default | match_single_line, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "ab\nzz", match_default | match_single_line, make_array(-2, -2)); + + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "ab", match_default | match_not_bol | match_not_eol | match_single_line, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "xxabxx", match_default | match_not_bol | match_not_eol | match_single_line, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ab", boost::regex::extended, "xx\nabzz", match_default | match_not_bol | match_not_eol | match_single_line, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "ab", match_default | match_not_bol | match_not_eol | match_single_line, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "abxx", match_default | match_not_bol | match_not_eol | match_single_line, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab$", boost::regex::extended, "ab\nzz", match_default | match_not_bol | match_not_eol | match_single_line, make_array(-2, -2)); + // + // changes to newline handling with 2.11: + // + TEST_REGEX_SEARCH("^.", boost::regex::extended, " \n \r\n ", match_default, make_array(0, 1, -2, 3, 4, -2, 7, 8, -2, -2)); + TEST_REGEX_SEARCH(".$", boost::regex::extended, " \n \r\n ", match_default, make_array(1, 2, -2, 4, 5, -2, 8, 9, -2, -2)); +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) + TEST_REGEX_SEARCH_W(L"^.", boost::regex::extended, L"\x2028 \x2028", match_default, make_array(0, 1, -2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH_W(L".$", boost::regex::extended, L" \x2028 \x2028", match_default, make_array(0, 1, -2, 2, 3, -2, 3, 4, -2, -2)); +#endif +} + diff --git a/libs/regex/test/regress/test_asserts.cpp b/libs/regex/test/regress/test_asserts.cpp new file mode 100644 index 0000000000..6ec2e4508b --- /dev/null +++ b/libs/regex/test/regress/test_asserts.cpp @@ -0,0 +1,72 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_forward_lookahead_asserts() +{ + // + // forward lookahead asserts added 21/01/02 + // + using namespace boost::regex_constants; + TEST_REGEX_SEARCH("((?:(?!a|b)\\w)+)(\\w+)", perl, " xxxabaxxx ", match_default, make_array(2, 11, 2, 5, 5, 11, -2, -2)); + TEST_REGEX_SEARCH("/\\*(?:(?!\\*/).)*\\*/", perl, " /**/ ", match_default, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("/\\*(?:(?!\\*/).)*\\*/", perl, " /***/ ", match_default, make_array(2, 7, -2, -2)); + TEST_REGEX_SEARCH("/\\*(?:(?!\\*/).)*\\*/", perl, " /********/ ", match_default, make_array(2, 12, -2, -2)); + TEST_REGEX_SEARCH("/\\*(?:(?!\\*/).)*\\*/", perl, " /* comment */ ", match_default, make_array(2, 15, -2, -2)); + TEST_REGEX_SEARCH("<\\s*a[^>]*>((?:(?!<\\s*/\\s*a\\s*>).)*)<\\s*/\\s*a\\s*>", perl, " <a href=\"here\">here</a> ", match_default, make_array(1, 24, 16, 20, -2, -2)); + TEST_REGEX_SEARCH("<\\s*a[^>]*>((?:(?!<\\s*/\\s*a\\s*>).)*)<\\s*/\\s*a\\s*>", perl, " <a href=\"here\">here< / a > ", match_default, make_array(1, 28, 16, 20, -2, -2)); + TEST_REGEX_SEARCH("<\\s*a[^>]*>((?:(?!<\\s*/\\s*a\\s*>).)*)(?=<\\s*/\\s*a\\s*>)", perl, " <a href=\"here\">here</a> ", match_default, make_array(1, 20, 16, 20, -2, -2)); + TEST_REGEX_SEARCH("<\\s*a[^>]*>((?:(?!<\\s*/\\s*a\\s*>).)*)(?=<\\s*/\\s*a\\s*>)", perl, " <a href=\"here\">here< / a > ", match_default, make_array(1, 20, 16, 20, -2, -2)); + TEST_REGEX_SEARCH("^(?!^(?:PRN|AUX|CLOCK\\$|NUL|CON|COM\\d|LPT\\d|\\..*)(?:\\..+)?$)[^\\x00-\\x1f\\\\?*:\"|/]+$", perl, "command.com", match_default, make_array(0, 11, -2, -2)); + TEST_REGEX_SEARCH("^(?!^(?:PRN|AUX|CLOCK\\$|NUL|CON|COM\\d|LPT\\d|\\..*)(?:\\..+)?$)[^\\x00-\\x1f\\\\?*:\"|/]+$", perl, "PRN", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?!^(?:PRN|AUX|CLOCK\\$|NUL|CON|COM\\d|LPT\\d|\\..*)(?:\\..+)?$)[^\\x00-\\x1f\\\\?*:\"|/]+$", perl, "COM2", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?=.*\\d).{4,8}$", perl, "abc3", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("^(?=.*\\d).{4,8}$", perl, "abc3def4", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("^(?=.*\\d).{4,8}$", perl, "ab2", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?=.*\\d).{4,8}$", perl, "abcdefg", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$", perl, "abc3", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$", perl, "abC3", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$", perl, "ABCD3", match_default, make_array(-2, -2)); + + // bug report test cases: + TEST_REGEX_SEARCH("(?=.{1,10}$).*.", perl, "AAAAA", match_default, make_array(0, 5, -2, -2)); + + // lookbehind assertions, added 2004-04-30 + TEST_REGEX_SEARCH("/\\*.*(?<=\\*)/", perl, "/**/", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("/\\*.*(?<=\\*)/", perl, "/*****/ ", match_default, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("(?<=['\"]).*?(?=['\"])", perl, " 'ac' ", match_default, make_array(2, 4, -2, -2)); + TEST_REGEX_SEARCH("(?<=['\"]).*?(?=['\"])", perl, " \"ac\" ", match_default, make_array(2, 4, -2, -2)); + TEST_REGEX_SEARCH("(?<=['\"]).*?(?<!\\\\)(?=['\"])", perl, " \"ac\" ", match_default, make_array(2, 4, -2, -2)); + TEST_REGEX_SEARCH("(?<=['\"]).*?(?<!\\\\)(?=['\"])", perl, " \"ac\\\" \" ", match_default, make_array(2, 7, -2, -2)); + // lookbehind, with nested lookahead! : + TEST_REGEX_SEARCH("/\\*.*(?<=(?=[[:punct:]])\\*)/", perl, "/**/", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("/\\*.*(?<=(?![[:alnum:]])\\*)/", perl, "/**/", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("/\\*.*(?<=(?>\\*))/", perl, "/**/", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("/\\*.*(?<=(?:\\*))/", perl, "/**/", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("/\\*.*(?<=(\\*))/", perl, "/**/", match_default, make_array(0, 4, 2, 3, -2, -2)); + // lookbehind with invalid content: + TEST_INVALID_REGEX("(/)\\*.*(?<=\\1)/", perl); + TEST_INVALID_REGEX("/\\*.*(?<=\\*+)/", perl); + TEST_INVALID_REGEX("/\\*.*(?<=\\X)/", perl); + TEST_INVALID_REGEX("/\\*.*(?<=[[.ae.]])/", perl); + + TEST_INVALID_REGEX("(?<=[abc]", perl); + TEST_INVALID_REGEX("(?<=", perl); + TEST_INVALID_REGEX("(?<", perl); + TEST_INVALID_REGEX("(?<*", perl); + TEST_INVALID_REGEX("(?", perl); +} + diff --git a/libs/regex/test/regress/test_backrefs.cpp b/libs/regex/test/regress/test_backrefs.cpp new file mode 100644 index 0000000000..58f4dedb2e --- /dev/null +++ b/libs/regex/test/regress/test_backrefs.cpp @@ -0,0 +1,107 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_backrefs() +{ + using namespace boost::regex_constants; + TEST_INVALID_REGEX("a(b)\\2c", perl); + TEST_INVALID_REGEX("a(b\\1)c", perl); + TEST_REGEX_SEARCH("a(b*)c\\1d", perl, "abbcbbd", match_default, make_array(0, 7, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\1d", perl, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\1d", perl, "abbcbbbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(.)\\1", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a([bc])\\1d", perl, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); + TEST_REGEX_SEARCH("a\\([bc]\\)\\1d", basic, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); + // strictly speaking this is at best ambiguous, at worst wrong, this is what most + // re implimentations will match though. + TEST_REGEX_SEARCH("a(([bc])\\2)*d", perl, "abbccd", match_default, make_array(0, 6, 3, 5, 3, 4, -2, -2)); + TEST_REGEX_SEARCH("a(([bc])\\2)*d", perl, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a((b)*\\2)*d", perl, "abbbd", match_default, make_array(0, 5, 1, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("(ab*)[ab]*\\1", perl, "ababaaa", match_default, make_array(0, 4, 0, 2, -2, 4, 7, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("(a)\\1bcd", perl, "aabcd", match_default, make_array(0, 5, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a)\\1bc*d", perl, "aabcd", match_default, make_array(0, 5, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a)\\1bc*d", perl, "aabd", match_default, make_array(0, 4, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a)\\1bc*d", perl, "aabcccd", match_default, make_array(0, 7, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a)\\1bc*[ce]d", perl, "aabcccd", match_default, make_array(0, 7, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("^(a)\\1b(c)*cd$", perl, "aabcccd", match_default, make_array(0, 7, 0, 1, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("a\\(b*\\)c\\1d", basic, "abbcbbd", match_default, make_array(0, 7, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a\\(b*\\)c\\1d", basic, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\(b*\\)c\\1d", basic, "abbcbbbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^\\(.\\)\\1", basic, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\([bc]\\)\\1d", basic, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); + // strictly speaking this is at best ambiguous, at worst wrong, this is what most + // re implimentations will match though. + TEST_REGEX_SEARCH("a\\(\\([bc]\\)\\2\\)*d", basic, "abbccd", match_default, make_array(0, 6, 3, 5, 3, 4, -2, -2)); + TEST_REGEX_SEARCH("a\\(\\([bc]\\)\\2\\)*d", basic, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\(\\(b\\)*\\2\\)*d", basic, "abbbd", match_default, make_array(0, 5, 1, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)\\1bcd", basic, "aabcd", match_default, make_array(0, 5, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)\\1bc*d", basic, "aabcd", match_default, make_array(0, 5, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)\\1bc*d", basic, "aabd", match_default, make_array(0, 4, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)\\1bc*d", basic, "aabcccd", match_default, make_array(0, 7, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)\\1bc*[ce]d", basic, "aabcccd", match_default, make_array(0, 7, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("^\\(a\\)\\1b\\(c\\)*cd$", basic, "aabcccd", match_default, make_array(0, 7, 0, 1, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("\\(ab*\\)[ab]*\\1", basic, "ababaaa", match_default, make_array(0, 7, 0, 1, -2, -2)); + // + // Now test the \g version: + // + TEST_INVALID_REGEX("a(b)\\g2c", perl); + TEST_INVALID_REGEX("a(b\\g1)c", perl); + TEST_INVALID_REGEX("a(b\\g0)c", perl); + TEST_REGEX_SEARCH("a(b*)c\\g1d", perl, "abbcbbd", match_default, make_array(0, 7, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\g1d", perl, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\g1d", perl, "abbcbbbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(.)\\g1", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a([bc])\\g1d", perl, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); + TEST_INVALID_REGEX("a(b)\\g{2}c", perl); + TEST_INVALID_REGEX("a(b\\g{1})c", perl); + TEST_INVALID_REGEX("a(b\\g{0})c", perl); + TEST_REGEX_SEARCH("a(b*)c\\g{1}d", perl, "abbcbbd", match_default, make_array(0, 7, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\g{1}d", perl, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\g{1}d", perl, "abbcbbbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(.)\\g{1}", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a([bc])\\g{1}d", perl, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); + // And again but with negative indexes: + TEST_INVALID_REGEX("a(b)\\g-2c", perl); + TEST_INVALID_REGEX("a(b\\g-1)c", perl); + TEST_INVALID_REGEX("a(b\\g-0)c", perl); + TEST_REGEX_SEARCH("a(b*)c\\g-1d", perl, "abbcbbd", match_default, make_array(0, 7, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\g-1d", perl, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\g-1d", perl, "abbcbbbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(.)\\g1", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a([bc])\\g1d", perl, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); + TEST_INVALID_REGEX("a(b)\\g{-2}c", perl); + TEST_INVALID_REGEX("a(b\\g{-1})c", perl); + TEST_REGEX_SEARCH("a(b*)c\\g{-1}d", perl, "abbcbbd", match_default, make_array(0, 7, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\g{-1}d", perl, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(b*)c\\g{-1}d", perl, "abbcbbbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(.)\\g{-1}", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a([bc])\\g{-1}d", perl, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); + + // And again but with named subexpressions: + TEST_REGEX_SEARCH("a(?<foo>(?<bar>(?<bb>(?<aa>b*))))c\\g{foo}d", perl, "abbcbbd", match_default, make_array(0, 7, 1, 3, 1, 3, 1, 3, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(?<foo>(?<bar>(?<bb>(?<aa>b*))))c\\g{foo}d", perl, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?<foo>(?<bar>(?<bb>(?<aa>b*))))c\\g{foo}d", perl, "abbcbbbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?<foo>.)\\g{foo}", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?<foo>[bc])\\g{foo}d", perl, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); + + TEST_REGEX_SEARCH("a(?'foo'(?'bar'(?'bb'(?'aa'b*))))c\\g{foo}d", perl, "abbcbbd", match_default, make_array(0, 7, 1, 3, 1, 3, 1, 3, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(?'foo'(?'bar'(?'bb'(?'aa'b*))))c\\g{foo}d", perl, "abbcbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?'foo'(?'bar'(?'bb'(?'aa'b*))))c\\g{foo}d", perl, "abbcbbbd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?'foo'.)\\g{foo}", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?'foo'[bc])\\g{foo}d", perl, "abcdabbd", match_default, make_array(4, 8, 5, 6, -2, -2)); +} + diff --git a/libs/regex/test/regress/test_deprecated.cpp b/libs/regex/test/regress/test_deprecated.cpp new file mode 100644 index 0000000000..276fa59965 --- /dev/null +++ b/libs/regex/test/regress/test_deprecated.cpp @@ -0,0 +1,377 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_deprecated.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Tests for deprecated interfaces. + */ + +#include "test.hpp" +#include <boost/cregex.hpp> + +#ifdef BOOST_MSVC +#pragma warning(disable:4267) +#endif + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::atoi; + using ::wcstol; +} +#endif + +int get_posix_compile_options(boost::regex_constants::syntax_option_type opts) +{ + using namespace boost; + int result = 0; + switch(opts & regbase::main_option_type) + { + case regbase::perl: + result = (opts & regbase::no_perl_ex) ? REG_EXTENDED : REG_PERL; + if(opts & (regbase::no_bk_refs|regbase::no_mod_m|regbase::mod_x|regbase::mod_s|regbase::no_mod_s|regbase::no_escape_in_lists|regbase::no_empty_expressions)) + return -1; + break; + case regbase::basic: + result = REG_BASIC; + if(opts & (regbase::no_char_classes|regbase::no_intervals|regbase::bk_plus_qm|regbase::bk_vbar)) + return -1; + if((opts & regbase::no_escape_in_lists) == 0) + return -1; + break; + default: + return -1; + } + + if(opts & regbase::icase) + result |= REG_ICASE; + if(opts & regbase::nosubs) + result |= REG_NOSUB; + if(opts & regbase::newline_alt) + result |= REG_NEWLINE; + if((opts & regbase::collate) == 0) + result |= REG_NOCOLLATE; + + return result; +} + +int get_posix_match_flags(boost::regex_constants::match_flag_type f) +{ + int result = 0; + if(f & boost::regex_constants::match_not_bol) + result |= boost::REG_NOTBOL; + if(f & boost::regex_constants::match_not_eol) + result |= boost::REG_NOTEOL; + if(f & ~(boost::regex_constants::match_not_bol|boost::regex_constants::match_not_eol)) + return -1; + return result; +} + +void test_deprecated(const char&, const test_regex_search_tag&) +{ + const std::string& expression = test_info<char>::expression(); + if(expression.find('\0') != std::string::npos) + return; + const std::string& search_text = test_info<char>::search_text(); + if(search_text.find('\0') != std::string::npos) + return; + int posix_options = get_posix_compile_options(test_info<char>::syntax_options()); + if(posix_options < 0) + return; + int posix_match_options = get_posix_match_flags(test_info<char>::match_options()); + if(posix_match_options < 0) + return; + const int* results = test_info<char>::answer_table(); + + // OK try and compile the expression: + boost::regex_tA re; + if(boost::regcompA(&re, expression.c_str(), posix_options) != 0) + { + BOOST_REGEX_TEST_ERROR("Expression : \"" << expression.c_str() << "\" did not compile with the POSIX C API.", char); + return; + } + // try and find the first occurance: + static const unsigned max_subs = 100; + boost::regmatch_t matches[max_subs]; + if(boost::regexecA(&re, search_text.c_str(), max_subs, matches, posix_match_options) == 0) + { + int i = 0; + while(results[2*i] != -2) + { + if((int)max_subs > i) + { + if(results[2*i] != matches[i].rm_so) + { + BOOST_REGEX_TEST_ERROR("Mismatch in start of subexpression " << i << " found with the POSIX C API.", char); + } + if(results[2*i+1] != matches[i].rm_eo) + { + BOOST_REGEX_TEST_ERROR("Mismatch in end of subexpression " << i << " found with the POSIX C API.", char); + } + } + ++i; + } + } + else + { + if(results[0] >= 0) + { + BOOST_REGEX_TEST_ERROR("Expression : \"" << expression.c_str() << "\" was not found with the POSIX C API.", char); + } + } + // clean up whatever: + boost::regfreeA(&re); + + // + // now try the RegEx class: + // + if(test_info<char>::syntax_options() & ~boost::regex::icase) + return; + try{ + boost::RegEx e(expression, (test_info<char>::syntax_options() & boost::regex::icase) != 0); + if(e.error_code()) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << e.error_code(), char); + } + if(e.Search(search_text, test_info<char>::match_options())) + { + int i = 0; + while(results[i*2] != -2) + { + if(e.Matched(i)) + { + if(results[2*i] != static_cast<int>(e.Position(i))) + { + BOOST_REGEX_TEST_ERROR("Mismatch in start of subexpression " << i << " found with the RegEx class (found " << e.Position(i) << " expected " << results[2*i] << ").", char); + } + if(results[2*i+1] != static_cast<int>(e.Position(i) + e.Length(i))) + { + BOOST_REGEX_TEST_ERROR("Mismatch in end of subexpression " << i << " found with the RegEx class (found " << e.Position(i) + e.Length(i) << " expected " << results[2*i+1] << ").", char); + } + } + else + { + if(results[2*i] >= 0) + { + BOOST_REGEX_TEST_ERROR("Mismatch in start of subexpression " << i << " found with the RegEx class (found " << e.Position(i) << " expected " << results[2*i] << ").", char); + } + if(results[2*i+1] >= 0) + { + BOOST_REGEX_TEST_ERROR("Mismatch in end of subexpression " << i << " found with the RegEx class (found " << e.Position(i) + e.Length(i) << " expected " << results[2*i+1] << ").", char); + } + } + ++i; + } + } + else + { + if(results[0] >= 0) + { + BOOST_REGEX_TEST_ERROR("Expression : \"" << expression.c_str() << "\" was not found with class RegEx.", char); + } + } + } + catch(const boost::bad_expression& r) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile with RegEx class: " << r.what(), char); + } + catch(const std::runtime_error& r) + { + BOOST_REGEX_TEST_ERROR("Unexpected std::runtime_error : " << r.what(), char); + } + catch(const std::exception& r) + { + BOOST_REGEX_TEST_ERROR("Unexpected std::exception: " << r.what(), char); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Unexpected exception of unknown type", char); + } + +} + +void test_deprecated(const wchar_t&, const test_regex_search_tag&) +{ +#ifndef BOOST_NO_WREGEX + const std::wstring& expression = test_info<wchar_t>::expression(); + if(expression.find(L'\0') != std::wstring::npos) + return; + const std::wstring& search_text = test_info<wchar_t>::search_text(); + if(search_text.find(L'\0') != std::wstring::npos) + return; + int posix_options = get_posix_compile_options(test_info<wchar_t>::syntax_options()); + if(posix_options < 0) + return; + int posix_match_options = get_posix_match_flags(test_info<wchar_t>::match_options()); + if(posix_match_options < 0) + return; + const int* results = test_info<wchar_t>::answer_table(); + + // OK try and compile the expression: + boost::regex_tW re; + if(boost::regcompW(&re, expression.c_str(), posix_options) != 0) + { + BOOST_REGEX_TEST_ERROR("Expression : \"" << expression.c_str() << "\" did not compile with the POSIX C API.", wchar_t); + return; + } + // try and find the first occurance: + static const unsigned max_subs = 100; + boost::regmatch_t matches[max_subs]; + if(boost::regexecW(&re, search_text.c_str(), max_subs, matches, posix_match_options) == 0) + { + int i = 0; + while(results[2*i] != -2) + { + if((int)max_subs > i) + { + if(results[2*i] != matches[i].rm_so) + { + BOOST_REGEX_TEST_ERROR("Mismatch in start of subexpression " << i << " found with the POSIX C API.", wchar_t); + } + if(results[2*i+1] != matches[i].rm_eo) + { + BOOST_REGEX_TEST_ERROR("Mismatch in end of subexpression " << i << " found with the POSIX C API.", wchar_t); + } + } + ++i; + } + } + else + { + if(results[0] >= 0) + { + BOOST_REGEX_TEST_ERROR("Expression : \"" << expression.c_str() << "\" was not found with the POSIX C API.", wchar_t); + } + } + // clean up whatever: + boost::regfreeW(&re); +#endif +} + +void test_deprecated(const char&, const test_invalid_regex_tag&) +{ + const std::string& expression = test_info<char>::expression(); + if(expression.find('\0') != std::string::npos) + return; + int posix_options = get_posix_compile_options(test_info<char>::syntax_options()); + if(posix_options < 0) + return; + + // OK try and compile the expression: + boost::regex_tA re; + int code = boost::regcompA(&re, expression.c_str(), posix_options); + if(code == 0) + { + boost::regfreeA(&re); + BOOST_REGEX_TEST_ERROR("Expression : \"" << expression.c_str() << "\" unexpectedly compiled with the POSIX C API.", char); + } + else + { + char buf[100]; + int s = boost::regerrorA(code, &re, 0, 0); + if(s < 100) + s = boost::regerrorA(code, &re, buf, 100); + s = boost::regerrorA(code | boost::REG_ITOA, &re, 0, 0); + if(s < 100) + { + s = boost::regerrorA(code | boost::REG_ITOA, &re, buf, 100); + re.re_endp = buf; + s = boost::regerrorA(code | boost::REG_ATOI, &re, buf, 100); + if(s) + { + int code2 = std::atoi(buf); + if(code2 != code) + { + BOOST_REGEX_TEST_ERROR("Got a bad error code from regerrA with REG_ATOI set: ", char); + } + } + } + } + // + // now try the RegEx class: + // + if(test_info<char>::syntax_options() & ~boost::regex::icase) + return; + bool have_catch = false; + try{ + boost::RegEx e(expression, (test_info<char>::syntax_options() & boost::regex::icase) != 0); + if(e.error_code()) + have_catch = true; + } + catch(const boost::bad_expression&) + { + have_catch = true; + } + catch(const std::runtime_error& r) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::runtime_error instead: " << r.what(), char); + } + catch(const std::exception& r) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::exception instead: " << r.what(), char); + } + catch(...) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but got an exception of unknown type instead", char); + } + if(!have_catch) + { + // oops expected exception was not thrown: + BOOST_REGEX_TEST_ERROR("Expected an exception, but didn't find one.", char); + } +} + +void test_deprecated(const wchar_t&, const test_invalid_regex_tag&) +{ +#ifndef BOOST_NO_WREGEX + const std::wstring& expression = test_info<wchar_t>::expression(); + if(expression.find(L'\0') != std::string::npos) + return; + int posix_options = get_posix_compile_options(test_info<wchar_t>::syntax_options()); + if(posix_options < 0) + return; + + // OK try and compile the expression: + boost::regex_tW re; + int code = boost::regcompW(&re, expression.c_str(), posix_options); + if(code == 0) + { + boost::regfreeW(&re); + BOOST_REGEX_TEST_ERROR("Expression : \"" << expression.c_str() << "\" unexpectedly compiled with the POSIX C API.", wchar_t); + } + else + { + wchar_t buf[100]; + int s = boost::regerrorW(code, &re, 0, 0); + if(s < 100) + s = boost::regerrorW(code, &re, buf, 100); + s = boost::regerrorW(code | boost::REG_ITOA, &re, 0, 0); + if(s < 100) + { + s = boost::regerrorW(code | boost::REG_ITOA, &re, buf, 100); + re.re_endp = buf; + s = boost::regerrorW(code | boost::REG_ATOI, &re, buf, 100); + if(s) + { + long code2 = std::wcstol(buf, 0, 10); + if(code2 != code) + { + BOOST_REGEX_TEST_ERROR("Got a bad error code from regerrW with REG_ATOI set: ", char); + } + } + } + } +#endif +} diff --git a/libs/regex/test/regress/test_deprecated.hpp b/libs/regex/test/regress/test_deprecated.hpp new file mode 100644 index 0000000000..dc0595063d --- /dev/null +++ b/libs/regex/test/regress/test_deprecated.hpp @@ -0,0 +1,35 @@ +/* + * + * Copyright (c) 1998-2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_deprecated.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Forward declare deprecated test functions. + */ + +#ifndef BOOST_REGEX_TEST_DEPRECATED +#define BOOST_REGEX_TEST_DEPRECATED + +template <class charT, class Tag> +void test_deprecated(const charT&, const Tag&) +{ + // do nothing +} + +void test_deprecated(const char&, const test_regex_search_tag&); +void test_deprecated(const wchar_t&, const test_regex_search_tag&); +void test_deprecated(const char&, const test_invalid_regex_tag&); +void test_deprecated(const wchar_t&, const test_invalid_regex_tag&); + + +#endif + diff --git a/libs/regex/test/regress/test_emacs.cpp b/libs/regex/test/regress/test_emacs.cpp new file mode 100644 index 0000000000..c91478c16c --- /dev/null +++ b/libs/regex/test/regress/test_emacs.cpp @@ -0,0 +1,166 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_emacs2(); + +void test_emacs() +{ + using namespace boost::regex_constants; + // now try operator + : + TEST_REGEX_SEARCH("ab+", emacs, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab+", emacs, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab+", emacs, "sssabbbbbbsss", match_default, make_array(3, 10, -2, -2)); + TEST_REGEX_SEARCH("ab+c+", emacs, "abbb", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab+c+", emacs, "accc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab+c+", emacs, "abbcc", match_default, make_array(0, 5, -2, -2)); + TEST_INVALID_REGEX("\\<+", emacs); + TEST_INVALID_REGEX("\\>+", emacs); + TEST_REGEX_SEARCH("\n+", emacs, "\n\n", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\+", emacs, "+", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\+", emacs, "++", match_default, make_array(0, 1, -2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("\\++", emacs, "++", match_default, make_array(0, 2, -2, -2)); + + // now try operator ? + TEST_REGEX_SEARCH("a?", emacs, "b", match_default, make_array(0, 0, -2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("ab?", emacs, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("ab?", emacs, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab?", emacs, "sssabbbbbbsss", match_default, make_array(3, 5, -2, -2)); + TEST_REGEX_SEARCH("ab?c?", emacs, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("ab?c?", emacs, "abbb", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab?c?", emacs, "accc", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab?c?", emacs, "abcc", match_default, make_array(0, 3, -2, -2)); + TEST_INVALID_REGEX("\\<?", emacs); + TEST_INVALID_REGEX("\\>?", emacs); + TEST_REGEX_SEARCH("\n?", emacs, "\n\n", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("\\?", emacs, "?", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\?", emacs, "?", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\??", emacs, "??", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + + TEST_REGEX_SEARCH("a*?", emacs, "aa", match_default, make_array(0, 0, -2, 0, 1, -2, 1, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("^a*?$", emacs, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^.*?$", emacs, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^\\(a\\)*?$", emacs, "aa", match_default, make_array(0, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("^[ab]*?$", emacs, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a??", emacs, "aa", match_default, make_array(0, 0, -2, 0, 1, -2, 1, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("a+?", emacs, "aa", match_default, make_array(0, 1, -2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\{1,3\\}?", emacs, "aaa", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("\\w+?w", emacs, "...ccccccwcccccw", match_default, make_array(3, 10, -2, 10, 16, -2, -2)); + TEST_REGEX_SEARCH("\\W+\\w+?w", emacs, "...ccccccwcccccw", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH("abc\\|\\w+?", emacs, "abd", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\|\\w+?", emacs, "abcd", match_default, make_array(0, 3, -2, 3, 4, -2, -2)); + TEST_REGEX_SEARCH("<\\ss*tag[^>]*>\\(.*?\\)<\\ss*/tag\\ss*>", emacs, " <tag>here is some text</tag> <tag></tag>", match_default, make_array(1, 29, 6, 23, -2, 30, 41, 35, 35, -2, -2)); + TEST_REGEX_SEARCH("<\\ss*tag[^>]*>\\(.*?\\)<\\ss*/tag\\ss*>", emacs, " < tag attr=\"something\">here is some text< /tag > <tag></tag>", match_default, make_array(1, 49, 24, 41, -2, 50, 61, 55, 55, -2, -2)); + TEST_INVALID_REGEX("a\\{1,3\\}\\{1\\}", emacs); + TEST_INVALID_REGEX("a**", emacs); + TEST_INVALID_REGEX("a++", emacs); + + TEST_REGEX_SEARCH("\\<abcd", emacs, " abcd", match_default, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("\\<ab", emacs, "cab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\<ab", emacs, "\nab", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\<tag", emacs, "::tag", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\<abcd", emacs, "abcd", match_default|match_not_bow, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\<abcd", emacs, " abcd", match_default|match_not_bow, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("\\<", emacs, "ab ", match_default|match_not_bow, make_array(-2, -2)); + TEST_REGEX_SEARCH(".\\<.", emacs, "ab", match_default|match_not_bow, make_array(-2, -2)); + TEST_REGEX_SEARCH(".\\<.", emacs, " b", match_default|match_not_bow, make_array(0, 2, -2, -2)); + // word end: + TEST_REGEX_SEARCH("abc\\>", emacs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\>", emacs, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\>", emacs, "abc\n", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\>", emacs, "abc::", match_default, make_array(0,3, -2, -2)); + TEST_REGEX_SEARCH("abc\\(?:\\>..\\|$\\)", emacs, "abc::", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("\\>", emacs, " ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH(".\\>.", emacs, " ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\>", emacs, "abc", match_default|match_not_eow, make_array(-2, -2)); + // word boundary: + TEST_REGEX_SEARCH("\\babcd", emacs, " abcd", match_default, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("\\bab", emacs, "cab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\bab", emacs, "\nab", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\btag", emacs, "::tag", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("abc\\b", emacs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\b", emacs, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\b", emacs, "abc\n", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\b", emacs, "abc::", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\babcd", emacs, "abcd", match_default|match_not_bow, make_array(-2, -2)); + // within word: + TEST_REGEX_SEARCH("\\B", emacs, "ab", match_default, make_array(1, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\Bb", emacs, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\B", emacs, "ab", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\B", emacs, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\B", emacs, "a ", match_default, make_array(-2, -2)); + // buffer operators: + TEST_REGEX_SEARCH("\\`abc", emacs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\`abc", emacs, "\nabc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\`abc", emacs, " abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\'", emacs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\'", emacs, "abc\n", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\'", emacs, "abc ", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("a\\|b", emacs, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\|b", emacs, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\|b\\|c", emacs, "c", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\|\\(b\\)\\|.", emacs, "b", match_default, make_array(0, 1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)\\|b\\|.", emacs, "a", match_default, make_array(0, 1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\(b\\|c\\)", emacs, "ab", match_default, make_array(0, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\(b\\|c\\)", emacs, "ac", match_default, make_array(0, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\(b\\|c\\)", emacs, "ad", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\(a\\|b\\|c\\)", emacs, "c", match_default, make_array(0, 1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\|\\(b\\)\\|.\\)", emacs, "b", match_default, make_array(0, 1, 0, 1, 0, 1, -2, -2)); + TEST_INVALID_REGEX("\\|c", emacs); + TEST_INVALID_REGEX("c\\|", emacs); + TEST_INVALID_REGEX("\\(\\|\\)", emacs); + TEST_INVALID_REGEX("\\(a\\|\\)", emacs); + TEST_INVALID_REGEX("\\(\\|a\\)", emacs); + + TEST_REGEX_SEARCH("\\(?:abc\\)+", emacs, "xxabcabcxx", match_default, make_array(2, 8, -2, -2)); + TEST_REGEX_SEARCH("\\(?:a+\\)\\(b+\\)", emacs, "xaaabbbx", match_default, make_array(1, 7, 4, 7, -2, -2)); + TEST_REGEX_SEARCH("\\(a+\\)\\(?:b+\\)", emacs, "xaaabbba", match_default, make_array(1, 7, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\(?:\\(a+\\)b+\\)", emacs, "xaaabbba", match_default, make_array(1, 7, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\(?:a+\\(b+\\)\\)", emacs, "xaaabbba", match_default, make_array(1, 7, 4, 7, -2, -2)); + TEST_REGEX_SEARCH("a+\\(?#b+\\)b+", emacs, "xaaabbba", match_default, make_array(1, 7, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)\\(?:b\\|$\\)", emacs, "ab", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\(a\\)\\(?:b\\|$\\)", emacs, "a", match_default, make_array(0, 1, 0, 1, -2, -2)); + test_emacs2(); +} + +void test_emacs2() +{ + using namespace boost::regex_constants; + + + TEST_REGEX_SEARCH("\\ss+", emacs, "a b", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\Ss+", emacs, " ab ", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\sw+", emacs, " ab ", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\Sw+", emacs, "a b", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\s_+", emacs, " $&*+-_<> ", match_default, make_array(1, 9, -2, -2)); + TEST_REGEX_SEARCH("\\S_+", emacs, "$&*+-_<>b", match_default, make_array(8, 9, -2, -2)); + TEST_REGEX_SEARCH("\\s.+", emacs, " .,;!? ", match_default, make_array(1, 6, -2, -2)); + TEST_REGEX_SEARCH("\\S.+", emacs, ".,;!?b", match_default, make_array(5, 6, -2, -2)); + TEST_REGEX_SEARCH("\\s(+", emacs, "([{ ", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\S(+", emacs, "([{ ", match_default, make_array(3, 4, -2, -2)); + TEST_REGEX_SEARCH("\\s)+", emacs, ")]} ", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\S)+", emacs, ")]} ", match_default, make_array(3, 4, -2, -2)); + TEST_REGEX_SEARCH("\\s\"+", emacs, "\"'` ", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\S\"+", emacs, "\"'` ", match_default, make_array(3, 4, -2, -2)); + TEST_REGEX_SEARCH("\\s'+", emacs, "',# ", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\S'+", emacs, "',# ", match_default, make_array(3, 4, -2, -2)); + TEST_REGEX_SEARCH("\\s<+", emacs, "; ", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\S<+", emacs, "; ", match_default, make_array(1, 2, -2, -2)); + TEST_REGEX_SEARCH("\\s>+", emacs, "\n\f ", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\S>+", emacs, "\n\f ", match_default, make_array(2, 3, -2, -2)); +} + diff --git a/libs/regex/test/regress/test_escapes.cpp b/libs/regex/test/regress/test_escapes.cpp new file mode 100644 index 0000000000..e3d675bee3 --- /dev/null +++ b/libs/regex/test/regress/test_escapes.cpp @@ -0,0 +1,166 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127 4428) +#endif + +void test_character_escapes() +{ + using namespace boost::regex_constants; + // characters by code + TEST_REGEX_SEARCH("\\0101", perl, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\00", perl, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\0", perl, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\0172", perl, "z", match_default, make_array(0, 1, -2, -2)); + // extra escape sequences: + TEST_REGEX_SEARCH("\\a", perl, "\a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\f", perl, "\f", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\n", perl, "\n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\r", perl, "\r", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\v", perl, "\v", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\t", perl, "\t", match_default, make_array(0, 1, -2, -2)); + + // updated tests for version 2: + TEST_REGEX_SEARCH("\\x41", perl, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\xff", perl, "\xff", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\xFF", perl, "\xff", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\c@", perl, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\cA", perl, "\x1", match_default, make_array(0, 1, -2, -2)); + //TEST_REGEX_SEARCH("\\cz", perl, "\x3A", match_default, make_array(0, 1, -2, -2)); + //TEST_INVALID_REGEX("\\c=", boost::regex::extended); + //TEST_INVALID_REGEX("\\c?", boost::regex::extended); + TEST_REGEX_SEARCH("=:", perl, "=:", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("\\e", perl, "\x1B", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\x1b", perl, "\x1B", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\x{1b}", perl, "\x1B", match_default, make_array(0, 1, -2, -2)); + TEST_INVALID_REGEX("\\x{}", perl); + TEST_INVALID_REGEX("\\x{", perl); + TEST_INVALID_REGEX("\\", perl); + TEST_INVALID_REGEX("\\c", perl); + TEST_INVALID_REGEX("\\x}", perl); + TEST_INVALID_REGEX("\\x", perl); + TEST_INVALID_REGEX("\\x{yy", perl); + TEST_INVALID_REGEX("\\x{1b", perl); + // \Q...\E sequences: + TEST_INVALID_REGEX("\\Qabc\\", perl); + TEST_REGEX_SEARCH("\\Qabc\\E", perl, "abcd", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\Qabc\\Ed", perl, "abcde", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("\\Q+*?\\\\E", perl, "+*?\\", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a\\Q+*?\\\\Eb", perl, "a+*?\\b", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\C+", perl, "abcde", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("\\X+", perl, "abcde", match_default, make_array(0, 5, -2, -2)); +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) + TEST_REGEX_SEARCH_W(L"\\X", perl, L"a\x0300\x0301", match_default, make_array(0, 3, -2, -2)); +#endif + // unknown escape sequences match themselves: + TEST_REGEX_SEARCH("\\~", perl, "~", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\~", basic, "~", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\~", boost::regex::extended, "~", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\j", boost::regex::extended, "j", match_default, make_array(0, 1, -2, -2)); +} + +void test_assertion_escapes() +{ + using namespace boost::regex_constants; + // word start: + TEST_REGEX_SEARCH("\\<abcd", perl, " abcd", match_default, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("\\<ab", perl, "cab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\<ab", perl, "\nab", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\<tag", perl, "::tag", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\<abcd", perl, "abcd", match_default|match_not_bow, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\<abcd", perl, " abcd", match_default|match_not_bow, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("\\<", perl, "ab ", match_default|match_not_bow, make_array(-2, -2)); + TEST_REGEX_SEARCH(".\\<.", perl, "ab", match_default|match_not_bow, make_array(-2, -2)); + TEST_REGEX_SEARCH(".\\<.", perl, " b", match_default|match_not_bow, make_array(0, 2, -2, -2)); + // word end: + TEST_REGEX_SEARCH("abc\\>", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\>", perl, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\>", perl, "abc\n", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\>", perl, "abc::", match_default, make_array(0,3, -2, -2)); + TEST_REGEX_SEARCH("abc(?:\\>..|$)", perl, "abc::", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("\\>", perl, " ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH(".\\>.", perl, " ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\>", perl, "abc", match_default|match_not_eow, make_array(-2, -2)); + // word boundary: + TEST_REGEX_SEARCH("\\babcd", perl, " abcd", match_default, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("\\bab", perl, "cab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\bab", perl, "\nab", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\btag", perl, "::tag", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("abc\\b", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\b", perl, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\b", perl, "abc\n", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\b", perl, "abc::", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\babcd", perl, "abcd", match_default|match_not_bow, make_array(-2, -2)); + // within word: + TEST_REGEX_SEARCH("\\B", perl, "ab", match_default, make_array(1, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\Bb", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\B", perl, "ab", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a\\B", perl, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\B", perl, "a ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\By\\b", perl, "xy", match_default, make_array(1, 2, -2, -2)); + TEST_REGEX_SEARCH("\\by\\B", perl, "yz", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\B\\*\\B", perl, " * ", match_default, make_array(1, 2, -2, -2)); + // buffer operators: + TEST_REGEX_SEARCH("\\`abc", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\`abc", perl, "\nabc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\`abc", perl, " abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\'", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\'", perl, "abc\n", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\'", perl, "abc ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc(?:\\'|$)", perl, "abc", match_default, make_array(0, 3, -2, -2)); + + // word start: + TEST_REGEX_SEARCH("[[:<:]]abcd", perl, " abcd", match_default, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("[[:<:]]ab", perl, "cab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[[:<:]]ab", perl, "\nab", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("[[:<:]]tag", perl, "::tag", match_default, make_array(2, 5, -2, -2)); + // word end + TEST_REGEX_SEARCH("abc[[:>:]]", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc[[:>:]]", perl, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc[[:>:]]", perl, "abc\n", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc[[:>:]]", perl, "abc::", match_default, make_array(0, 3, -2, -2)); + + TEST_REGEX_SEARCH("\\Aabc", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\Aabc", perl, "aabc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\z", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\z", perl, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\Z", perl, "abc\n\n", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc\\Z", perl, "abc\n\n", match_default|match_not_eob, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc\\Z", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\Gabc", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\Gabc", perl, "dabcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\Gbc", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\Aab", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc(?:\\Z|$)", perl, "abc\n\n", match_default, make_array(0, 3, -2, -2)); + + // Buffer reset \K: + TEST_REGEX_SEARCH("(foo)\\Kbar", perl, "foobar", match_default, make_array(3, 6, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(foo)(\\Kbar|baz)", perl, "foobar", match_default, make_array(3, 6, 0, 3, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(foo)(\\Kbar|baz)", perl, "foobaz", match_default, make_array(0, 6, 0, 3, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(foo\\Kbar)baz", perl, "foobarbaz", match_default, make_array(3, 9, 0, 6, -2, -2)); + + // Line ending \R: + TEST_REGEX_SEARCH("\\R", perl, "foo\nbar", match_default, make_array(3, 4, -2, -2)); + TEST_REGEX_SEARCH("\\R", perl, "foo\rbar", match_default, make_array(3, 4, -2, -2)); + TEST_REGEX_SEARCH("\\R", perl, "foo\r\nbar", match_default, make_array(3, 5, -2, -2)); + // see if \u works: + const wchar_t* w = L"\u2028"; + if(*w == 0x2028u) + { + TEST_REGEX_SEARCH_W(L"\\R", perl, L"foo\u2028bar", match_default, make_array(3, 4, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\R", perl, L"foo\u2029bar", match_default, make_array(3, 4, -2, -2)); + } +} + diff --git a/libs/regex/test/regress/test_grep.cpp b/libs/regex/test/regress/test_grep.cpp new file mode 100644 index 0000000000..501ee87e08 --- /dev/null +++ b/libs/regex/test/regress/test_grep.cpp @@ -0,0 +1,67 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_grep() +{ + // + // now test grep, + // basically check all our restart types - line, word, etc + // checking each one for null and non-null matches. + // + using namespace boost::regex_constants; + TEST_REGEX_SEARCH("a", perl|nosubs, " a a a aa", match_default, make_array(1, 2, -2, 3, 4, -2, 5, 6, -2, 7, 8, -2, 8, 9, -2, -2)); + TEST_REGEX_SEARCH("a+b+", perl|nosubs, "aabaabbb ab", match_default, make_array(0, 3, -2, 3, 8, -2, 9, 11, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", perl|nosubs, "adabbdacd", match_default, make_array(0, 2, -2, 2, 6, -2, 6, 9, -2, -2)); + TEST_REGEX_SEARCH("a", perl|nosubs, "\na\na\na\naa", match_default, make_array(1, 2, -2, 3, 4, -2, 5, 6, -2, 7, 8, -2, 8, 9, -2, -2)); + TEST_REGEX_SEARCH("^", perl|nosubs, " \n\n \n\n\n", match_default, make_array(0, 0, -2, 4, 4, -2, 5, 5, -2, 8, 8, -2, 9, 9, -2, 10, 10, -2, -2)); + TEST_REGEX_SEARCH("^ab", perl|nosubs, "ab \nab ab\n", match_default, make_array(0, 2, -2, 5, 7, -2, -2)); + TEST_REGEX_SEARCH("^[^\\n]*\n", perl|nosubs, " \n \n\n \n", match_default, make_array(0, 4, -2, 4, 7, -2, 7, 8, -2, 8, 11, -2, -2)); + TEST_REGEX_SEARCH("\\<abc", perl|nosubs, "abcabc abc\n\nabc", match_default, make_array(0, 3, -2, 7, 10, -2, 12, 15, -2, -2)); + TEST_REGEX_SEARCH("\\<", perl|nosubs, " ab a aaa ", match_default, make_array(2, 2, -2, 5, 5, -2, 7, 7, -2, -2)); + TEST_REGEX_SEARCH("\\<\\w+\\W+", perl|nosubs, " aa aa a ", match_default, make_array(1, 5, -2, 5, 9, -2, 9, 11, -2, -2)); + + TEST_REGEX_SEARCH("\\Aabc", perl|nosubs, "abc abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\G\\w+\\W+", perl|nosubs, "abc abc a cbbb ", match_default, make_array(0, 5, -2, 5, 9, -2, 9, 11, -2, 11, 18, -2, -2)); + TEST_REGEX_SEARCH("\\Ga+b+", perl|nosubs, "aaababb abb", match_default, make_array(0, 4, -2, 4, 7, -2, -2)); + TEST_REGEX_SEARCH("abc", perl|nosubs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc", perl|nosubs, " abc abcabc", match_default, make_array(1, 4, -2, 5, 8, -2, 8, 11, -2, -2)); + TEST_REGEX_SEARCH("\\n\\n", perl|nosubs, " \n\n\n \n \n\n\n\n ", match_default, make_array(1, 3, -2, 18, 20, -2, 20, 22, -2, -2)); + TEST_REGEX_SEARCH("$", perl|nosubs, " \n\n \n\n\n", match_default, make_array(3, 3, -2, 4, 4, -2, 7, 7, -2, 8, 8, -2, 9, 9, -2, 10, 10, -2, -2)); + TEST_REGEX_SEARCH("\\b", perl|nosubs, " abb a abbb ", match_default, make_array(2, 2, -2, 5, 5, -2, 6, 6, -2, 7, 7, -2, 8, 8, -2, 12, 12, -2, -2)); + TEST_REGEX_SEARCH("A", perl|icase|nosubs, " a a a aa", match_default, make_array(1, 2, -2, 3, 4, -2, 5, 6, -2, 7, 8, -2, 8, 9, -2, -2)); + TEST_REGEX_SEARCH("A+B+", perl|icase|nosubs, "aabaabbb ab", match_default, make_array(0, 3, -2, 3, 8, -2, 9, 11, -2, -2)); + TEST_REGEX_SEARCH("A(B*|c|e)D", perl|icase|nosubs, "adabbdacd", match_default, make_array(0, 2, -2, 2, 6, -2, 6, 9, -2, -2)); + TEST_REGEX_SEARCH("A", perl|icase|nosubs, "\na\na\na\naa", match_default, make_array(1, 2, -2, 3, 4, -2, 5, 6, -2, 7, 8, -2, 8, 9, -2, -2)); + TEST_REGEX_SEARCH("^aB", perl|icase|nosubs, "Ab \nab Ab\n", match_default, make_array(0, 2, -2, 5, 7, -2, -2)); + TEST_REGEX_SEARCH("\\<abc", perl|icase|nosubs, "Abcabc aBc\n\nabc", match_default, make_array(0, 3, -2, 7, 10, -2, 12, 15, -2, -2)); + TEST_REGEX_SEARCH("ABC", perl|icase|nosubs, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("abc", perl|icase|nosubs, " ABC ABCABC ", match_default, make_array(1, 4, -2, 5, 8, -2, 8, 11, -2, -2)); + TEST_REGEX_SEARCH("a|\\Ab", perl, "b ab", match_default, make_array(0, 1, -2, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a|^b", perl, "b ab\nb", match_default, make_array(0, 1, -2, 2, 3, -2, 5, 6, -2, -2)); + TEST_REGEX_SEARCH("a|\\<b", perl, "b ab\nb", match_default, make_array(0, 1, -2, 2, 3, -2, 5, 6, -2, -2)); + + TEST_REGEX_SEARCH("\\Aabc", perl, "abcabc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("^abc", perl, "abcabc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\<abc", perl, "abcabc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\babc", perl, "abcabc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?<=\\Aabc)?abc", perl, "abcabc", match_default, make_array(0, 3, -2, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?<=^abc)?abc", perl, "abcabc", match_default, make_array(0, 3, -2, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?<=\\<abc)?abc", perl, "abcabc", match_default, make_array(0, 3, -2, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?<=\\babc)?abc", perl, "abcabc", match_default, make_array(0, 3, -2, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?<=^).{2}|(?<=^.{3}).{2}", perl, "123456789", match_default, make_array(0, 2, -2, 3, 5, -2, -2)); +} + diff --git a/libs/regex/test/regress/test_icu.cpp b/libs/regex/test/regress/test_icu.cpp new file mode 100644 index 0000000000..feb5b4a4bb --- /dev/null +++ b/libs/regex/test/regress/test_icu.cpp @@ -0,0 +1,649 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_icu.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Test code for Unicode regexes with ICU support. + */ + +// +// We can only build this if we have ICU support: +// +#include <boost/regex/config.hpp> +#if defined(BOOST_HAS_ICU) && !defined(BOOST_NO_STD_WSTRING) + +#include <boost/regex/icu.hpp> +#include "test.hpp" + +namespace unnecessary_fix{ +// +// Some outrageously broken std lib's don't have a conforming +// back_insert_iterator, which means we can't use the std version +// as an argument to regex_replace, sigh... use our own: +// +template <class Seq> +class back_insert_iterator +#ifndef BOOST_NO_STD_ITERATOR + : public std::iterator<std::output_iterator_tag,void,void,void,void> +#endif +{ +private: + Seq* container; +public: + typedef const typename Seq::value_type value_type; + typedef Seq container_type; + typedef std::output_iterator_tag iterator_category; + + explicit back_insert_iterator(Seq& x) : container(&x) {} + back_insert_iterator& operator=(const value_type& val) + { + container->push_back(val); + return *this; + } + back_insert_iterator& operator*() { return *this; } + back_insert_iterator& operator++() { return *this; } + back_insert_iterator operator++(int) { return *this; } +}; + +template <class Seq> +inline back_insert_iterator<Seq> back_inserter(Seq& x) +{ + return back_insert_iterator<Seq>(x); +} + +} + +// +// compare two match_results struct's for equality, +// converting the iterator as needed: +// +template <class MR1, class MR2> +void compare_result(const MR1& w1, const MR2& w2, boost::mpl::int_<2> const*) +{ + typedef typename MR2::value_type MR2_value_type; + typedef typename MR2_value_type::const_iterator MR2_iterator_type; + typedef boost::u16_to_u32_iterator<MR2_iterator_type> iterator_type; + typedef typename MR1::size_type size_type; + if(w1.size() != w2.size()) + { + BOOST_REGEX_TEST_ERROR("Size mismatch in match_results class", UChar32); + } + for(int i = 0; i < (int)w1.size(); ++i) + { + if(w1[i].matched) + { + if(w2[i].matched == 0) + { + BOOST_REGEX_TEST_ERROR("Matched mismatch in match_results class", UChar32); + } + if((w1.position(i) != boost::re_detail::distance(iterator_type(w2.prefix().first), iterator_type(w2[i].first))) || (w1.length(i) != boost::re_detail::distance(iterator_type(w2[i].first), iterator_type(w2[i].second)))) + { + BOOST_REGEX_TEST_ERROR("Iterator mismatch in match_results class", UChar32); + } + } + else if(w2[i].matched) + { + BOOST_REGEX_TEST_ERROR("Matched mismatch in match_results class", UChar32); + } + } +} +template <class MR1, class MR2> +void compare_result(const MR1& w1, const MR2& w2, boost::mpl::int_<1> const*) +{ + typedef typename MR2::value_type MR2_value_type; + typedef typename MR2_value_type::const_iterator MR2_iterator_type; + typedef boost::u8_to_u32_iterator<MR2_iterator_type> iterator_type; + typedef typename MR1::size_type size_type; + if(w1.size() != w2.size()) + { + BOOST_REGEX_TEST_ERROR("Size mismatch in match_results class", UChar32); + } + for(int i = 0; i < (int)w1.size(); ++i) + { + if(w1[i].matched) + { + if(w2[i].matched == 0) + { + BOOST_REGEX_TEST_ERROR("Matched mismatch in match_results class", UChar32); + } + if((w1.position(i) != boost::re_detail::distance(iterator_type(w2.prefix().first), iterator_type(w2[i].first))) || (w1.length(i) != boost::re_detail::distance(iterator_type(w2[i].first), iterator_type(w2[i].second)))) + { + BOOST_REGEX_TEST_ERROR("Iterator mismatch in match_results class", UChar32); + } + } + else if(w2[i].matched) + { + BOOST_REGEX_TEST_ERROR("Matched mismatch in match_results class", UChar32); + } + } +} + +void test_icu_grep(const boost::u32regex& r, const std::vector< ::UChar32>& search_text) +{ + typedef std::vector< ::UChar32>::const_iterator const_iterator; + typedef boost::u32regex_iterator<const_iterator> test_iterator; + boost::regex_constants::match_flag_type opts = test_info<wchar_t>::match_options(); + const int* answer_table = test_info<wchar_t>::answer_table(); + test_iterator start(search_text.begin(), search_text.end(), r, opts), end; + test_iterator copy(start); + const_iterator last_end = search_text.begin(); + while(start != end) + { + if(start != copy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", wchar_t); + } + if(!(start == copy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", wchar_t); + } + test_result(*start, search_text.begin(), answer_table); + // test $` and $' : + if(start->prefix().first != last_end) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for start of $`", wchar_t); + } + if(start->prefix().second != (*start)[0].first) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for end of $`", wchar_t); + } + if(start->prefix().matched != (start->prefix().first != start->prefix().second)) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for matched member of $`", wchar_t); + } + if(start->suffix().first != (*start)[0].second) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for start of $'", wchar_t); + } + if(start->suffix().second != search_text.end()) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for end of $'", wchar_t); + } + if(start->suffix().matched != (start->suffix().first != start->suffix().second)) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for matched member of $'", wchar_t); + } + last_end = (*start)[0].second; + ++start; + ++copy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", wchar_t); + } +} + +void test_icu(const wchar_t&, const test_regex_search_tag& ) +{ + boost::u32regex r; + if(*test_locale::c_str()) + { + U_NAMESPACE_QUALIFIER Locale l(test_locale::c_str()); + if(l.isBogus()) + return; + r.imbue(l); + } + + std::vector< ::UChar32> expression; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression.assign(test_info<wchar_t>::expression().begin(), test_info<wchar_t>::expression().end()); +#else + std::copy(test_info<wchar_t>::expression().begin(), test_info<wchar_t>::expression().end(), std::back_inserter(expression)); +#endif + boost::regex_constants::syntax_option_type syntax_options = test_info<UChar32>::syntax_options(); + try{ +#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) + r.assign(expression.begin(), expression.end(), syntax_options); +#else + if(expression.size()) + r.assign(&*expression.begin(), expression.size(), syntax_options); + else + r.assign(static_cast<UChar32 const*>(0), expression.size(), syntax_options); +#endif + if(r.status()) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << r.status(), UChar32); + } + std::vector< ::UChar32> search_text; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + search_text.assign(test_info<wchar_t>::search_text().begin(), test_info<wchar_t>::search_text().end()); +#else + std::copy(test_info<wchar_t>::search_text().begin(), test_info<wchar_t>::search_text().end(), std::back_inserter(search_text)); +#endif + boost::regex_constants::match_flag_type opts = test_info<wchar_t>::match_options(); + const int* answer_table = test_info<wchar_t>::answer_table(); + boost::match_results<std::vector< ::UChar32>::const_iterator> what; + if(boost::u32regex_search( + const_cast<std::vector< ::UChar32>const&>(search_text).begin(), + const_cast<std::vector< ::UChar32>const&>(search_text).end(), + what, + r, + opts)) + { + test_result(what, const_cast<std::vector< ::UChar32>const&>(search_text).begin(), answer_table); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", UChar32); + } + + if(0 == *test_locale::c_str()) + { + // + // Now try UTF-16 construction: + // + typedef boost::u32_to_u16_iterator<std::vector<UChar32>::const_iterator> u16_conv; + std::vector<UChar> expression16, text16; + boost::match_results<std::vector<UChar>::const_iterator> what16; + boost::match_results<const UChar*> what16c; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression16.assign(u16_conv(expression.begin()), u16_conv(expression.end())); + text16.assign(u16_conv(search_text.begin()), u16_conv(search_text.end())); +#else + expression16.clear(); + std::copy(u16_conv(expression.begin()), u16_conv(expression.end()), std::back_inserter(expression16)); + text16.clear(); + std::copy(u16_conv(search_text.begin()), u16_conv(search_text.end()), std::back_inserter(text16)); +#endif + r = boost::make_u32regex(expression16.begin(), expression16.end(), syntax_options); + if(boost::u32regex_search(const_cast<const std::vector<UChar>&>(text16).begin(), const_cast<const std::vector<UChar>&>(text16).end(), what16, r, opts)) + { + compare_result(what, what16, static_cast<boost::mpl::int_<2> const*>(0)); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", UChar32); + } + if(std::find(expression16.begin(), expression16.end(), 0) == expression16.end()) + { + expression16.push_back(0); + r = boost::make_u32regex(&*expression16.begin(), syntax_options); + if(std::find(text16.begin(), text16.end(), 0) == text16.end()) + { + text16.push_back(0); + if(boost::u32regex_search((const UChar*)&*text16.begin(), what16c, r, opts)) + { + compare_result(what, what16c, static_cast<boost::mpl::int_<2> const*>(0)); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", UChar32); + } + } + } + // + // Now try UTF-8 construction: + // + typedef boost::u32_to_u8_iterator<std::vector<UChar32>::const_iterator, unsigned char> u8_conv; + std::vector<unsigned char> expression8, text8; + boost::match_results<std::vector<unsigned char>::const_iterator> what8; + boost::match_results<const unsigned char*> what8c; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression8.assign(u8_conv(expression.begin()), u8_conv(expression.end())); + text8.assign(u8_conv(search_text.begin()), u8_conv(search_text.end())); +#else + expression8.clear(); + std::copy(u8_conv(expression.begin()), u8_conv(expression.end()), std::back_inserter(expression8)); + text8.clear(); + std::copy(u8_conv(search_text.begin()), u8_conv(search_text.end()), std::back_inserter(text8)); +#endif + r = boost::make_u32regex(expression8.begin(), expression8.end(), syntax_options); + if(boost::u32regex_search(const_cast<const std::vector<unsigned char>&>(text8).begin(), const_cast<const std::vector<unsigned char>&>(text8).end(), what8, r, opts)) + { + compare_result(what, what8, static_cast<boost::mpl::int_<1> const*>(0)); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", UChar32); + } + if(std::find(expression8.begin(), expression8.end(), 0) == expression8.end()) + { + expression8.push_back(0); + r = boost::make_u32regex(&*expression8.begin(), syntax_options); + if(std::find(text8.begin(), text8.end(), 0) == text8.end()) + { + text8.push_back(0); + if(boost::u32regex_search((const unsigned char*)&*text8.begin(), what8c, r, opts)) + { + compare_result(what, what8c, static_cast<boost::mpl::int_<1> const*>(0)); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", UChar32); + } + } + } + } + // + // finally try a grep: + // + test_icu_grep(r, search_text); + } + catch(const boost::bad_expression& e) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done: " << e.what(), UChar32); + } + catch(const std::runtime_error& e) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::runtime_error: " << e.what(), UChar32); + } + catch(const std::exception& e) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::exception: " << e.what(), UChar32); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected exception of unknown type", UChar32); + } +} + +void test_icu(const wchar_t&, const test_invalid_regex_tag&) +{ + typedef boost::u16_to_u32_iterator<std::wstring::const_iterator, ::UChar32> conv_iterator; + std::vector< ::UChar32> expression; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression.assign(test_info<wchar_t>::expression().begin(), test_info<wchar_t>::expression().end()); +#else + std::copy(test_info<wchar_t>::expression().begin(), test_info<wchar_t>::expression().end(), std::back_inserter(expression)); +#endif + boost::regex_constants::syntax_option_type syntax_options = test_info<wchar_t>::syntax_options(); + boost::u32regex r; + if(*test_locale::c_str()) + { + U_NAMESPACE_QUALIFIER Locale l(test_locale::c_str()); + if(l.isBogus()) + return; + r.imbue(l); + } + // + // try it with exceptions disabled first: + // + try + { +#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) + if(0 == r.assign(expression.begin(), expression.end(), syntax_options | boost::regex_constants::no_except).status()) +#else + if(expression.size()) + r.assign(&*expression.begin(), expression.size(), syntax_options | boost::regex_constants::no_except); + else + r.assign(static_cast<UChar32 const*>(0), static_cast<boost::u32regex::size_type>(0), syntax_options | boost::regex_constants::no_except); + if(0 == r.status()) +#endif + { + BOOST_REGEX_TEST_ERROR("Expression compiled when it should not have done so.", wchar_t); + } + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Unexpected exception thrown.", wchar_t); + } + // + // now try again with exceptions: + // + bool have_catch = false; + try{ +#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) + r.assign(expression.begin(), expression.end(), syntax_options); +#else + if(expression.size()) + r.assign(&*expression.begin(), expression.size(), syntax_options); + else + r.assign(static_cast<UChar32 const*>(0), static_cast<boost::u32regex::size_type>(0), syntax_options); +#endif +#ifdef BOOST_NO_EXCEPTIONS + if(r.status()) + have_catch = true; +#endif + } + catch(const boost::bad_expression&) + { + have_catch = true; + } + catch(const std::runtime_error& e) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::runtime_error instead: " << e.what(), wchar_t); + } + catch(const std::exception& e) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::exception instead: " << e.what(), wchar_t); + } + catch(...) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but got an exception of unknown type instead", wchar_t); + } + if(!have_catch) + { + // oops expected exception was not thrown: + BOOST_REGEX_TEST_ERROR("Expected an exception, but didn't find one.", wchar_t); + } + + if(0 == *test_locale::c_str()) + { + // + // Now try UTF-16 construction: + // + typedef boost::u32_to_u16_iterator<std::vector<UChar32>::const_iterator> u16_conv; + std::vector<UChar> expression16; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression16.assign(u16_conv(expression.begin()), u16_conv(expression.end())); +#else + std::copy(u16_conv(expression.begin()), u16_conv(expression.end()), std::back_inserter(expression16)); +#endif + if(0 == boost::make_u32regex(expression16.begin(), expression16.end(), syntax_options | boost::regex_constants::no_except).status()) + { + BOOST_REGEX_TEST_ERROR("Expression compiled when it should not have done so.", wchar_t); + } + if(std::find(expression16.begin(), expression16.end(), 0) == expression16.end()) + { + expression16.push_back(0); + if(0 == boost::make_u32regex(&*expression16.begin(), syntax_options | boost::regex_constants::no_except).status()) + { + BOOST_REGEX_TEST_ERROR("Expression compiled when it should not have done so.", wchar_t); + } + } + // + // Now try UTF-8 construction: + // + typedef boost::u32_to_u8_iterator<std::vector<UChar32>::const_iterator> u8_conv; + std::vector<unsigned char> expression8; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression8.assign(u8_conv(expression.begin()), u8_conv(expression.end())); +#else + std::copy(u8_conv(expression.begin()), u8_conv(expression.end()), std::back_inserter(expression8)); +#endif + if(0 == boost::make_u32regex(expression8.begin(), expression8.end(), syntax_options | boost::regex_constants::no_except).status()) + { + BOOST_REGEX_TEST_ERROR("Expression compiled when it should not have done so.", wchar_t); + } + if(std::find(expression8.begin(), expression8.end(), 0) == expression8.end()) + { + expression8.push_back(0); + if(0 == boost::make_u32regex(&*expression8.begin(), syntax_options | boost::regex_constants::no_except).status()) + { + BOOST_REGEX_TEST_ERROR("Expression compiled when it should not have done so.", wchar_t); + } + } + } +} + +void test_icu(const wchar_t&, const test_regex_replace_tag&) +{ + std::vector< ::UChar32> expression; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression.assign(test_info<wchar_t>::expression().begin(), test_info<wchar_t>::expression().end()); +#else + std::copy(test_info<wchar_t>::expression().begin(), test_info<wchar_t>::expression().end(), std::back_inserter(expression)); +#endif + boost::regex_constants::syntax_option_type syntax_options = test_info<UChar32>::syntax_options(); + boost::u32regex r; + try{ +#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) + r.assign(expression.begin(), expression.end(), syntax_options); +#else + if(expression.size()) + r.assign(&*expression.begin(), expression.size(), syntax_options); + else + r.assign(static_cast<UChar32 const*>(0), static_cast<boost::u32regex::size_type>(0), syntax_options); +#endif + if(r.status()) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << r.status(), UChar32); + } + typedef std::vector<UChar32> string_type; + string_type search_text; + boost::regex_constants::match_flag_type opts = test_info<UChar32>::match_options(); + string_type format_string; + string_type result_string; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + search_text.assign(test_info<UChar32>::search_text().begin(), test_info<UChar32>::search_text().end()); + format_string.assign(test_info<UChar32>::format_string().begin(), test_info<UChar32>::format_string().end()); + format_string.push_back(0); + result_string.assign(test_info<UChar32>::result_string().begin(), test_info<UChar32>::result_string().end()); +#else + std::copy(test_info<UChar32>::search_text().begin(), test_info<UChar32>::search_text().end(), std::back_inserter(search_text)); + std::copy(test_info<UChar32>::format_string().begin(), test_info<UChar32>::format_string().end(), std::back_inserter(format_string)); + format_string.push_back(0); + std::copy(test_info<UChar32>::result_string().begin(), test_info<UChar32>::result_string().end(), std::back_inserter(result_string)); +#endif + string_type result; + + boost::u32regex_replace(unnecessary_fix::back_inserter(result), search_text.begin(), search_text.end(), r, &*format_string.begin(), opts); + if(result != result_string) + { + BOOST_REGEX_TEST_ERROR("regex_replace generated an incorrect string result", UChar32); + } + // + // Mixed mode character encoding: + // + if(0 == *test_locale::c_str()) + { + // + // Now try UTF-16 construction: + // + typedef boost::u32_to_u16_iterator<std::vector<UChar32>::const_iterator> u16_conv; + std::vector<UChar> expression16, text16, format16, result16, found16; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression16.assign(u16_conv(expression.begin()), u16_conv(expression.end())); + text16.assign(u16_conv(search_text.begin()), u16_conv(search_text.end())); + format16.assign(u16_conv(format_string.begin()), u16_conv(format_string.end())); + result16.assign(u16_conv(result_string.begin()), u16_conv(result_string.end())); +#else + std::copy(u16_conv(expression.begin()), u16_conv(expression.end()), std::back_inserter(expression16)); + std::copy(u16_conv(search_text.begin()), u16_conv(search_text.end()), std::back_inserter(text16)); + std::copy(u16_conv(format_string.begin()), u16_conv(format_string.end()), std::back_inserter(format16)); + std::copy(u16_conv(result_string.begin()), u16_conv(result_string.end()), std::back_inserter(result16)); +#endif + r = boost::make_u32regex(expression16.begin(), expression16.end(), syntax_options); + boost::u32regex_replace(unnecessary_fix::back_inserter(found16), text16.begin(), text16.end(), r, &*format16.begin(), opts); + if(result16 != found16) + { + BOOST_REGEX_TEST_ERROR("u32regex_replace with UTF-16 string returned incorrect result", UChar32); + } + // + // Now with UnicodeString: + // + U_NAMESPACE_QUALIFIER UnicodeString expression16u, text16u, format16u, result16u, found16u; + if(expression16.size()) + expression16u.setTo(&*expression16.begin(), expression16.size()); + if(text16.size()) + text16u.setTo(&*text16.begin(), text16.size()); + format16u.setTo(&*format16.begin(), format16.size()-1); + if(result16.size()) + result16u.setTo(&*result16.begin(), result16.size()); + r = boost::make_u32regex(expression16.begin(), expression16.end(), syntax_options); + found16u = boost::u32regex_replace(text16u, r, format16u, opts); + if(result16u != found16u) + { + BOOST_REGEX_TEST_ERROR("u32regex_replace with UTF-16 string returned incorrect result", UChar32); + } + + // + // Now try UTF-8 construction: + // + typedef boost::u32_to_u8_iterator<std::vector<UChar32>::const_iterator, unsigned char> u8_conv; + std::vector<char> expression8, text8, format8, result8, found8; +#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS + expression8.assign(u8_conv(expression.begin()), u8_conv(expression.end())); + text8.assign(u8_conv(search_text.begin()), u8_conv(search_text.end())); + format8.assign(u8_conv(format_string.begin()), u8_conv(format_string.end())); + result8.assign(u8_conv(result_string.begin()), u8_conv(result_string.end())); +#else + std::copy(u8_conv(expression.begin()), u8_conv(expression.end()), std::back_inserter(expression8)); + std::copy(u8_conv(search_text.begin()), u8_conv(search_text.end()), std::back_inserter(text8)); + std::copy(u8_conv(format_string.begin()), u8_conv(format_string.end()), std::back_inserter(format8)); + std::copy(u8_conv(result_string.begin()), u8_conv(result_string.end()), std::back_inserter(result8)); +#endif + r = boost::make_u32regex(expression8.begin(), expression8.end(), syntax_options); + boost::u32regex_replace(unnecessary_fix::back_inserter(found8), text8.begin(), text8.end(), r, &*format8.begin(), opts); + if(result8 != found8) + { + BOOST_REGEX_TEST_ERROR("u32regex_replace with UTF-8 string returned incorrect result", UChar32); + } + // + // Now with std::string and UTF-8: + // + std::string expression8s, text8s, format8s, result8s, found8s; + if(expression8.size()) + expression8s.assign(&*expression8.begin(), expression8.size()); + if(text8.size()) + text8s.assign(&*text8.begin(), text8.size()); + format8s.assign(&*format8.begin(), format8.size()-1); + if(result8.size()) + result8s.assign(&*result8.begin(), result8.size()); + r = boost::make_u32regex(expression8.begin(), expression8.end(), syntax_options); + found8s = boost::u32regex_replace(text8s, r, format8s, opts); + if(result8s != found8s) + { + BOOST_REGEX_TEST_ERROR("u32regex_replace with UTF-8 string returned incorrect result", UChar32); + } + } + } + catch(const boost::bad_expression& e) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done: " << e.what(), UChar32); + } + catch(const std::runtime_error& e) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::runtime_error: " << e.what(), UChar32); + } + catch(const std::exception& e) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::exception: " << e.what(), UChar32); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected exception of unknown type", UChar32); + } +} + +#else + +#include "test.hpp" + +void test_icu(const wchar_t&, const test_regex_search_tag&){} +void test_icu(const wchar_t&, const test_invalid_regex_tag&){} +void test_icu(const wchar_t&, const test_regex_replace_tag&){} + +#endif diff --git a/libs/regex/test/regress/test_icu.hpp b/libs/regex/test/regress/test_icu.hpp new file mode 100644 index 0000000000..cd90e984f6 --- /dev/null +++ b/libs/regex/test/regress/test_icu.hpp @@ -0,0 +1,33 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_icu.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: MFC/ATL test handlers. + */ + +#ifndef TEST_ICU_HPP +#define TEST_ICU_HPP + +template <class charT, class Tag> +void test_icu(const charT&, const Tag&) +{ + // do nothing +} + +void test_icu(const wchar_t&, const test_regex_search_tag&); +void test_icu(const wchar_t&, const test_invalid_regex_tag&); +void test_icu(const wchar_t&, const test_regex_replace_tag&); + + +#endif diff --git a/libs/regex/test/regress/test_locale.cpp b/libs/regex/test/regress/test_locale.cpp new file mode 100644 index 0000000000..7bbefa4ea6 --- /dev/null +++ b/libs/regex/test/regress/test_locale.cpp @@ -0,0 +1,210 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" +#include <clocale> +#if defined(BOOST_WINDOWS) && !defined(BOOST_DISABLE_WIN32) +#include <boost/scoped_array.hpp> +#include <windows.h> +#endif + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ using ::setlocale; } +#endif + +test_locale::test_locale(const char* c_name, boost::uint32_t lcid) +{ +#ifndef UNDER_CE + // store the name: + m_old_name = m_name; + m_name = c_name; + // back up C locale and then set it's new name: + const char* pl = std::setlocale(LC_ALL, 0); + m_old_c_locale = pl ? pl : ""; + m_old_c_state = s_c_locale; + if(std::setlocale(LC_ALL, c_name)) + { + s_c_locale = test_with_locale; + std::cout << "Testing the global C locale: " << c_name << std::endl; + } + else + { + s_c_locale = no_test; + std::cout << "The global C locale: " << c_name << " is not available and will not be tested." << std::endl; + } +#else + s_c_locale = no_test; +#endif +#ifndef BOOST_NO_STD_LOCALE + // back up the C++ locale and create the new one: + m_old_cpp_locale = s_cpp_locale_inst; + m_old_cpp_state = s_cpp_locale; + try{ + s_cpp_locale_inst = std::locale(c_name); + s_cpp_locale = test_with_locale; + std::cout << "Testing the C++ locale: " << c_name << std::endl; + }catch(std::runtime_error const &) + { + s_cpp_locale = no_test; + std::cout << "The C++ locale: " << c_name << " is not available and will not be tested." << std::endl; + } +#else + s_cpp_locale = no_test; +#endif + + // back up win locale and create the new one: + m_old_win_locale = s_win_locale_inst; + m_old_win_state = s_win_locale; + s_win_locale_inst = lcid; +#if defined(BOOST_WINDOWS) && !defined(BOOST_DISABLE_WIN32) + // + // Start by geting the printable name of the locale. + // We use this for debugging purposes only: + // +#ifndef BOOST_NO_ANSI_APIS + boost::scoped_array<char> p; + int r = ::GetLocaleInfoA( + lcid, // locale identifier + LOCALE_SCOUNTRY, // information type + 0, // information buffer + 0 // size of buffer + ); + p.reset(new char[r+1]); + r = ::GetLocaleInfoA( + lcid, // locale identifier + LOCALE_SCOUNTRY, // information type + p.get(), // information buffer + r+1 // size of buffer + ); +#else + WCHAR code_page_string[7]; + int r = ::GetLocaleInfoW( + lcid, + LOCALE_IDEFAULTANSICODEPAGE, + code_page_string, + 7); + BOOST_ASSERT(r != 0); + + UINT code_page = static_cast<UINT>(_wtol(code_page_string)); + + boost::scoped_array<wchar_t> wp; + r = ::GetLocaleInfoW( + lcid, // locale identifier + LOCALE_SCOUNTRY, // information type + 0, // information buffer + 0 // size of buffer + ); + wp.reset(new wchar_t[r+1]); + r = ::GetLocaleInfoW( + lcid, // locale identifier + LOCALE_SCOUNTRY, // information type + wp.get(), // information buffer + r+1 // size of buffer + ); + + int name_size = (r+1) * 2; + boost::scoped_array<char> p(new char[name_size]); + int conv_r = ::WideCharToMultiByte( + code_page, + 0, + wp.get(), r, + p.get(), name_size, + NULL, NULL + ); + BOOST_ASSERT(conv_r != 0); +#endif + // + // now see if locale is installed and behave accordingly: + // + if(::IsValidLocale(lcid, LCID_INSTALLED)) + { + s_win_locale = test_with_locale; + std::cout << "Testing the Win32 locale: \"" << p.get() << "\" (0x" << std::hex << lcid << ")" << std::endl; + } + else + { + s_win_locale = no_test; + std::cout << "The Win32 locale: \"" << p.get() << "\" (0x" << std::hex << lcid << ") is not available and will not be tested." << std::endl; + } +#else + s_win_locale = no_test; +#endif +} + +test_locale::~test_locale() +{ + // restore to previous state: +#ifndef UNDER_CE + std::setlocale(LC_ALL, m_old_c_locale.c_str()); + s_c_locale = m_old_c_state; +#endif +#ifndef BOOST_NO_STD_LOCALE + s_cpp_locale_inst = m_old_cpp_locale; +#endif + s_cpp_locale = m_old_cpp_state; + s_win_locale_inst = m_old_win_locale; + s_win_locale = m_old_win_state; + m_name = m_old_name; +} + +int test_locale::s_c_locale = test_no_locale; +int test_locale::s_cpp_locale = test_no_locale; +int test_locale::s_win_locale = test_no_locale; +#ifndef BOOST_NO_STD_LOCALE +std::locale test_locale::s_cpp_locale_inst; +#endif +boost::uint32_t test_locale::s_win_locale_inst = 0; +std::string test_locale::m_name; + + +void test_en_locale(const char* name, boost::uint32_t lcid) +{ + using namespace boost::regex_constants; + errors_as_warnings w; + test_locale l(name, lcid); + TEST_REGEX_SEARCH_L("[[:lower:]]+", perl, "\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xf7", match_default, make_array(1, 32, -2, -2)); + TEST_REGEX_SEARCH_L("[[:upper:]]+", perl, "\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf", match_default, make_array(1, 31, -2, -2)); +// TEST_REGEX_SEARCH_L("[[:punct:]]+", perl, "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0", match_default, make_array(0, 31, -2, -2)); + TEST_REGEX_SEARCH_L("[[:print:]]+", perl, "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe", match_default, make_array(0, 93, -2, -2)); + TEST_REGEX_SEARCH_L("[[:graph:]]+", perl, "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe", match_default, make_array(0, 93, -2, -2)); + TEST_REGEX_SEARCH_L("[[:word:]]+", perl, "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe", match_default, make_array(0, 61, -2, -2)); + // collation sensitive ranges: +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) + // these tests are disabled for Borland C++: a bug in std::collate<wchar_t> + // causes these tests to crash (pointer overrun in std::collate<wchar_t>::do_transform). + TEST_REGEX_SEARCH_L("[a-z]+", perl|::boost::regex_constants::collate, "\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc", match_default, make_array(0, 28, -2, -2)); + TEST_REGEX_SEARCH_L("[a-z]+", perl|::boost::regex_constants::collate, "\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc", match_default, make_array(1, 28, -2, -2)); + // and equivalence classes: + TEST_REGEX_SEARCH_L("[[=a=]]+", perl, "aA\xe0\xe1\xe2\xe3\xe4\xe5\xc0\xc1\xc2\xc3\xc4\xc5", match_default, make_array(0, 14, -2, -2)); + // case mapping: + TEST_REGEX_SEARCH_L("[A-Z]+", perl|icase|::boost::regex_constants::collate, "\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc", match_default, make_array(0, 28, -2, -2)); + TEST_REGEX_SEARCH_L("[a-z]+", perl|icase|::boost::regex_constants::collate, "\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc", match_default, make_array(1, 28, -2, -2)); + TEST_REGEX_SEARCH_L("\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd", perl|icase, "\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe", match_default, make_array(1, 30, -2, -2)); +#endif +} + +void test_en_locale() +{ + // VC6 seems to have problems with std::setlocale, I've never + // gotten to the bottem of this as the program runs fine under the + // debugger, but hangs when run from bjam: +#if !BOOST_WORKAROUND(BOOST_MSVC, <1300) && !(defined(__ICL) && defined(_MSC_VER) && (_MSC_VER == 1200)) + test_en_locale("en_US", 0x09 | 0x01 << 10); + test_en_locale("en_UK", 0x09 | 0x02 << 10); + test_en_locale("en", 0x09); +#endif +} + + diff --git a/libs/regex/test/regress/test_locale.hpp b/libs/regex/test/regress/test_locale.hpp new file mode 100644 index 0000000000..dfc72d78fd --- /dev/null +++ b/libs/regex/test/regress/test_locale.hpp @@ -0,0 +1,90 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_locale.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Helper classes for testing locale-specific expressions. + */ + + +#ifndef BOOST_REGEX_REGRESS_TEST_LOCALE_HPP +#define BOOST_REGEX_REGRESS_TEST_LOCALE_HPP +// +// defines class test_locale that handles the locale used for testing: +// +class test_locale +{ +public: + enum{ + no_test, + test_no_locale, + test_with_locale + }; + + test_locale(const char* c_name, boost::uint32_t lcid); + ~test_locale(); + + static int c_locale_state() + { + return s_c_locale; + } + static int cpp_locale_state() + { + return s_cpp_locale; + } + static int win_locale_state() + { + return s_win_locale; + } + static const char* c_str() + { + return m_name.c_str(); + } +#ifndef BOOST_NO_STD_LOCALE + static std::locale cpp_locale() + { + return s_cpp_locale_inst; + } +#endif + static boost::uint32_t win_locale() + { + return s_win_locale_inst; + } + +private: + // the actions to take for each locale type: + static int s_c_locale; + static int s_cpp_locale; + static int s_win_locale; + // current locales: +#ifndef BOOST_NO_STD_LOCALE + static std::locale s_cpp_locale_inst; +#endif + static boost::uint32_t s_win_locale_inst; + static std::string m_name; + + // backed up versions of the previous locales and their action state: + std::string m_old_c_locale; + std::string m_old_name; + int m_old_c_state; +#ifndef BOOST_NO_STD_LOCALE + std::locale m_old_cpp_locale; +#endif + int m_old_cpp_state; + boost::uint32_t m_old_win_locale; + int m_old_win_state; + +}; + +#endif + diff --git a/libs/regex/test/regress/test_mfc.cpp b/libs/regex/test/regress/test_mfc.cpp new file mode 100644 index 0000000000..fc7265b4c8 --- /dev/null +++ b/libs/regex/test/regress/test_mfc.cpp @@ -0,0 +1,551 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_mfc.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Test code for MFC/ATL strings with Boost.Regex. + */ + +// +// We can only build this if we have ATL support: +// +#include <boost/config.hpp> + +#ifdef TEST_MFC + +#include <boost/regex/mfc.hpp> +#include "test.hpp" +#include "atlstr.h" + +#pragma warning(disable:4267) + +void test_mfc(const char&, const test_regex_search_tag&) +{ + const std::string& ss = test_info<char>::search_text(); + const std::string& ss2 = test_info<char>::expression(); + CAtlStringA s(ss.c_str(), ss.size()); + CAtlStringA s2(ss2.c_str(), ss2.size()); + boost::regex_constants::match_flag_type opts = test_info<char>::match_options(); + const int* answer_table = test_info<char>::answer_table(); + boost::regex r = boost::make_regex(s2, test_info<char>::syntax_options()); + boost::cmatch what; + if(boost::regex_search( + s, + what, + r, + opts)) + { + test_result(what, s.GetString(), answer_table); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", char); + } + // + // regex_match tests: + // + if(answer_table[0] < 0) + { + if(boost::regex_match(s, r, opts)) + { + BOOST_REGEX_TEST_ERROR("boost::regex_match found a match when it should not have done so.", char); + } + } + else + { + if((answer_table[0] > 0) && boost::regex_match(s, r, opts)) + { + BOOST_REGEX_TEST_ERROR("boost::regex_match found a match when it should not have done so.", char); + } + else if((answer_table[0] == 0) && (answer_table[1] == static_cast<int>(ss.size()))) + { + if(boost::regex_match( + s, + what, + r, + opts)) + { + test_result(what, s.GetString(), answer_table); + if(!boost::regex_match(s, r, opts)) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", char); + } + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", char); + } + } + } + // + // test regex_iterator: + // + boost::cregex_iterator start(boost::make_regex_iterator(s, r, opts)), end; + boost::cregex_iterator copy(start); + while(start != end) + { + if(start != copy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", char); + } + if(!(start == copy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", char); + } + test_result(*start, s.GetString(), answer_table); + ++start; + ++copy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", char); + } + // + // test regex_token_iterator: + // + typedef boost::regex_token_iterator<const char*> token_iterator; + answer_table = test_info<char>::answer_table(); + // + // we start by testing sub-expression 0: + // + token_iterator tstart(boost::make_regex_token_iterator(s, r, 0, opts)), tend; + token_iterator tcopy(tstart); + while(tstart != tend) + { + if(tstart != tcopy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", char); + } + if(!(tstart == tcopy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", char); + } + test_sub_match(*tstart, s.GetString(), answer_table, 0); + ++tstart; + ++tcopy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", char); + } + // + // and now field spitting: + // + token_iterator tstart2(boost::make_regex_token_iterator(s, r, -1, opts)), tend2; + token_iterator tcopy2(tstart2); + int last_end2 = 0; + answer_table = test_info<char>::answer_table(); + while(tstart2 != tend2) + { + if(tstart2 != tcopy2) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", char); + } + if(!(tstart2 == tcopy2)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", char); + } +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#endif + if(boost::re_detail::distance(s.GetString(), tstart2->first) != last_end2) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of start of field split, found: " + << boost::re_detail::distance(s.GetString(), tstart2->first) + << ", expected: " + << last_end2 + << ".", char); + } + int expected_end = static_cast<int>(answer_table[0] < 0 ? s.GetLength() : answer_table[0]); + if(boost::re_detail::distance(s.GetString(), tstart2->second) != expected_end) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of end2 of field split, found: " + << boost::re_detail::distance(s.GetString(), tstart2->second) + << ", expected: " + << expected_end + << ".", char); + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + last_end2 = answer_table[1]; + ++tstart2; + ++tcopy2; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", char); + } + +} + +void test_mfc(const wchar_t&, const test_regex_search_tag&) +{ + const std::wstring& ss = test_info<wchar_t>::search_text(); + const std::wstring& ss2 = test_info<wchar_t>::expression(); + CAtlStringW s(ss.c_str(), ss.size()); + CAtlStringW s2(ss2.c_str(), ss2.size()); + boost::regex_constants::match_flag_type opts = test_info<wchar_t>::match_options(); + const int* answer_table = test_info<wchar_t>::answer_table(); + boost::wregex r = boost::make_regex(s2, test_info<wchar_t>::syntax_options()); + boost::wcmatch what; + if(boost::regex_search( + s, + what, + r, + opts)) + { + test_result(what, s.GetString(), answer_table); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", wchar_t); + } + // + // regex_match tests: + // + if(answer_table[0] < 0) + { + if(boost::regex_match(s, r, opts)) + { + BOOST_REGEX_TEST_ERROR("boost::regex_match found a match when it should not have done so.", wchar_t); + } + } + else + { + if((answer_table[0] > 0) && boost::regex_match(s, r, opts)) + { + BOOST_REGEX_TEST_ERROR("boost::regex_match found a match when it should not have done so.", wchar_t); + } + else if((answer_table[0] == 0) && (answer_table[1] == static_cast<int>(ss.size()))) + { + if(boost::regex_match( + s, + what, + r, + opts)) + { + test_result(what, s.GetString(), answer_table); + if(!boost::regex_match(s, r, opts)) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", wchar_t); + } + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", wchar_t); + } + } + } + // + // test regex_iterator: + // + boost::wcregex_iterator start(boost::make_regex_iterator(s, r, opts)), end; + boost::wcregex_iterator copy(start); + while(start != end) + { + if(start != copy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", wchar_t); + } + if(!(start == copy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", wchar_t); + } + test_result(*start, s.GetString(), answer_table); + ++start; + ++copy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", wchar_t); + } + // + // test regex_token_iterator: + // + typedef boost::regex_token_iterator<const wchar_t*> token_iterator; + answer_table = test_info<wchar_t>::answer_table(); + // + // we start by testing sub-expression 0: + // + token_iterator tstart(boost::make_regex_token_iterator(s, r, 0, opts)), tend; + token_iterator tcopy(tstart); + while(tstart != tend) + { + if(tstart != tcopy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", wchar_t); + } + if(!(tstart == tcopy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", wchar_t); + } + test_sub_match(*tstart, s.GetString(), answer_table, 0); + ++tstart; + ++tcopy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", wchar_t); + } + // + // and now field spitting: + // + token_iterator tstart2(boost::make_regex_token_iterator(s, r, -1, opts)), tend2; + token_iterator tcopy2(tstart2); + int last_end2 = 0; + answer_table = test_info<wchar_t>::answer_table(); + while(tstart2 != tend2) + { + if(tstart2 != tcopy2) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", wchar_t); + } + if(!(tstart2 == tcopy2)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", wchar_t); + } +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#endif + if(boost::re_detail::distance(s.GetString(), tstart2->first) != last_end2) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of start of field split, found: " + << boost::re_detail::distance(s.GetString(), tstart2->first) + << ", expected: " + << last_end2 + << ".", wchar_t); + } + int expected_end = static_cast<int>(answer_table[0] < 0 ? s.GetLength() : answer_table[0]); + if(boost::re_detail::distance(s.GetString(), tstart2->second) != expected_end) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of end2 of field split, found: " + << boost::re_detail::distance(s.GetString(), tstart2->second) + << ", expected: " + << expected_end + << ".", wchar_t); + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + last_end2 = answer_table[1]; + ++tstart2; + ++tcopy2; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", wchar_t); + } + +} + +void test_mfc(const char&, const test_invalid_regex_tag&) +{ + std::string ss = test_info<char>::expression(); + CAtlStringA s(ss.c_str(), ss.size()); + bool have_catch = false; + try{ + boost::regex e = boost::make_regex(s, test_info<char>::syntax_options()); + if(e.error_code()) + have_catch = true; + } + catch(const boost::bad_expression&) + { + have_catch = true; + } + catch(const std::runtime_error& r) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::runtime_error instead: " << r.what(), char); + } + catch(const std::exception& r) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::exception instead: " << r.what(), char); + } + catch(...) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but got an exception of unknown type instead", char); + } + if(!have_catch) + { + // oops expected exception was not thrown: + BOOST_REGEX_TEST_ERROR("Expected an exception, but didn't find one.", char); + } + +} + +void test_mfc(const wchar_t&, const test_invalid_regex_tag&) +{ + std::wstring ss = test_info<wchar_t>::expression(); + CAtlStringW s(ss.c_str(), ss.size()); + bool have_catch = false; + try{ + boost::wregex e = boost::make_regex(s, test_info<wchar_t>::syntax_options()); + if(e.error_code()) + have_catch = true; + } + catch(const boost::bad_expression&) + { + have_catch = true; + } + catch(const std::runtime_error& r) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::runtime_error instead: " << r.what(), wchar_t); + } + catch(const std::exception& r) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::exception instead: " << r.what(), wchar_t); + } + catch(...) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but got an exception of unknown type instead", wchar_t); + } + if(!have_catch) + { + // oops expected exception was not thrown: + BOOST_REGEX_TEST_ERROR("Expected an exception, but didn't find one.", wchar_t); + } +} + +void test_mfc(const char&, const test_regex_replace_tag&) +{ + const CStringA expression(test_info<char>::expression().c_str(), test_info<char>::expression().size()); + boost::regex_constants::syntax_option_type syntax_options = test_info<char>::syntax_options(); + try{ + boost::regex r = boost::make_regex(expression, syntax_options); + if(r.status()) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << r.status(), char); + } + const CStringA search_text(test_info<char>::search_text().c_str(), test_info<char>::search_text().size()); + boost::regex_constants::match_flag_type opts = test_info<char>::match_options(); + const CStringA format_string(test_info<char>::format_string().c_str(), test_info<char>::format_string().size()); + const CStringA result_string(test_info<char>::result_string().c_str(), test_info<char>::result_string().size()); + + CStringA result = boost::regex_replace(search_text, r, format_string, opts); + if(result != result_string) + { + BOOST_REGEX_TEST_ERROR("regex_replace generated an incorrect string result", char); + } + } + catch(const boost::bad_expression& e) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done: " << e.what(), char); + } + catch(const std::runtime_error& r) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::runtime_error: " << r.what(), char); + } + catch(const std::exception& r) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::exception: " << r.what(), char); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected exception of unknown type", char); + } +} + +void test_mfc(const wchar_t&, const test_regex_replace_tag&) +{ + const CStringW expression(test_info<wchar_t>::expression().c_str(), test_info<wchar_t>::expression().size()); + boost::regex_constants::syntax_option_type syntax_options = test_info<wchar_t>::syntax_options(); + try{ + boost::wregex r = boost::make_regex(expression, syntax_options); + if(r.status()) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << r.status(), wchar_t); + } + const CStringW search_text(test_info<wchar_t>::search_text().c_str(), test_info<wchar_t>::search_text().size()); + boost::regex_constants::match_flag_type opts = test_info<wchar_t>::match_options(); + const CStringW format_string(test_info<wchar_t>::format_string().c_str(), test_info<wchar_t>::format_string().size()); + const CStringW result_string(test_info<wchar_t>::result_string().c_str(), test_info<wchar_t>::result_string().size()); + + CStringW result = boost::regex_replace(search_text, r, format_string, opts); + if(result != result_string) + { + BOOST_REGEX_TEST_ERROR("regex_replace generated an incorrect string result", wchar_t); + } + } + catch(const boost::bad_expression& e) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done: " << e.what(), wchar_t); + } + catch(const std::runtime_error& r) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::runtime_error: " << r.what(), wchar_t); + } + catch(const std::exception& r) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::exception: " << r.what(), wchar_t); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected exception of unknown type", wchar_t); + } +} + +#else + +#include "test.hpp" + +void test_mfc(const char&, const test_regex_search_tag&){} +void test_mfc(const wchar_t&, const test_regex_search_tag&){} +void test_mfc(const char&, const test_invalid_regex_tag&){} +void test_mfc(const wchar_t&, const test_invalid_regex_tag&){} +void test_mfc(const char&, const test_regex_replace_tag&){} +void test_mfc(const wchar_t&, const test_regex_replace_tag&){} + + +#endif diff --git a/libs/regex/test/regress/test_mfc.hpp b/libs/regex/test/regress/test_mfc.hpp new file mode 100644 index 0000000000..befee1c781 --- /dev/null +++ b/libs/regex/test/regress/test_mfc.hpp @@ -0,0 +1,36 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_mfc.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: MFC/ATL test handlers. + */ + +#ifndef TEST_MFC_HPP +#define TEST_MFC_HPP + +template <class charT, class Tag> +void test_mfc(const charT&, const Tag&) +{ + // do nothing +} + +void test_mfc(const char&, const test_regex_search_tag&); +void test_mfc(const wchar_t&, const test_regex_search_tag&); +void test_mfc(const char&, const test_invalid_regex_tag&); +void test_mfc(const wchar_t&, const test_invalid_regex_tag&); +void test_mfc(const char&, const test_regex_replace_tag&); +void test_mfc(const wchar_t&, const test_regex_replace_tag&); + + +#endif diff --git a/libs/regex/test/regress/test_non_greedy_repeats.cpp b/libs/regex/test/regress/test_non_greedy_repeats.cpp new file mode 100644 index 0000000000..3196f5acd0 --- /dev/null +++ b/libs/regex/test/regress/test_non_greedy_repeats.cpp @@ -0,0 +1,45 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_non_greedy_repeats() +{ + // + // non-greedy repeats added 21/04/00 + // + using namespace boost::regex_constants; + TEST_REGEX_SEARCH("a*?", perl, "aa", match_default, make_array(0, 0, -2, 0, 1, -2, 1, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("^a*?$", perl, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^.*?$", perl, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^(a)*?$", perl, "aa", match_default, make_array(0, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("^[ab]*?$", perl, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a??", perl, "aa", match_default, make_array(0, 0, -2, 0, 1, -2, 1, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("a+?", perl, "aa", match_default, make_array(0, 1, -2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a{1,3}?", perl, "aaa", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("\\w+?w", perl, "...ccccccwcccccw", match_default, make_array(3, 10, -2, 10, 16, -2, -2)); + TEST_REGEX_SEARCH("\\W+\\w+?w", perl, "...ccccccwcccccw", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH("abc|\\w+?", perl, "abd", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("abc|\\w+?", perl, "abcd", match_default, make_array(0, 3, -2, 3, 4, -2, -2)); + TEST_REGEX_SEARCH("<\\s*tag[^>]*>(.*?)<\\s*/tag\\s*>", perl, " <tag>here is some text</tag> <tag></tag>", match_default, make_array(1, 29, 6, 23, -2, 30, 41, 35, 35, -2, -2)); + TEST_REGEX_SEARCH("<\\s*tag[^>]*>(.*?)<\\s*/tag\\s*>", perl, " < tag attr=\"something\">here is some text< /tag > <tag></tag>", match_default, make_array(1, 49, 24, 41, -2, 50, 61, 55, 55, -2, -2)); + TEST_REGEX_SEARCH("xx-{0,2}?(?:[+-][0-9])??\\z", perl, "xx--", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("xx.{0,2}?(?:[+-][0-9])??\\z", perl, "xx--", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("xx.{0,2}?(?:[+-][0-9])??\\z", perl, "xx--", match_default|match_not_dot_newline, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("xx[/-]{0,2}?(?:[+-][0-9])??\\z", perl, "xx--", match_default, make_array(0, 4, -2, -2)); + TEST_INVALID_REGEX("a{1,3}{1}", perl); + TEST_INVALID_REGEX("a**", perl); +} + diff --git a/libs/regex/test/regress/test_not_regex.hpp b/libs/regex/test/regress/test_not_regex.hpp new file mode 100644 index 0000000000..c1032994a9 --- /dev/null +++ b/libs/regex/test/regress/test_not_regex.hpp @@ -0,0 +1,114 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_not_regex.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Declares tests for invalid regexes. + */ + + +#ifndef BOOST_REGEX_REGRESS_TEST_NOT_REGEX_HPP +#define BOOST_REGEX_REGRESS_TEST_NOT_REGEX_HPP +#include "info.hpp" +// +// this file implements a test for a regular expression that should not compile: +// +struct test_invalid_regex_tag{}; + +template<class charT, class traits> +void test_empty(boost::basic_regex<charT, traits>& r) +{ + if(!r.empty()) + { + BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::empty().", charT); + } + if(r.size()) + { + BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::size().", charT); + } + if(r.str().size()) + { + BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::str().", charT); + } + if(r.begin() != r.end()) + { + BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::begin().", charT); + } + if(r.status() == 0) + { + BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::status().", charT); + } +} + +template<class charT, class traits> +void test(boost::basic_regex<charT, traits>& r, const test_invalid_regex_tag&) +{ + const std::basic_string<charT>& expression = test_info<charT>::expression(); + boost::regex_constants::syntax_option_type syntax_options = test_info<charT>::syntax_options(); + // + // try it with exceptions disabled first: + // + try + { + if(0 == r.assign(expression, syntax_options | boost::regex_constants::no_except).status()) + { + BOOST_REGEX_TEST_ERROR("Expression compiled when it should not have done so.", charT); + } + test_empty(r); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Unexpected exception thrown.", charT); + } + // + // now try again with exceptions: + // + bool have_catch = false; + try{ + r.assign(expression, syntax_options); +#ifdef BOOST_NO_EXCEPTIONS + if(r.status()) + have_catch = true; +#endif + } + catch(const boost::bad_expression&) + { + have_catch = true; + test_empty(r); + } + catch(const std::runtime_error& e) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::runtime_error instead: " << e.what(), charT); + } + catch(const std::exception& e) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::exception instead: " << e.what(), charT); + } + catch(...) + { + have_catch = true; + BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but got an exception of unknown type instead", charT); + } + if(!have_catch) + { + // oops expected exception was not thrown: + BOOST_REGEX_TEST_ERROR("Expected an exception, but didn't find one.", charT); + } + +} + + + +#endif diff --git a/libs/regex/test/regress/test_operators.cpp b/libs/regex/test/regress/test_operators.cpp new file mode 100644 index 0000000000..e9a947c3d0 --- /dev/null +++ b/libs/regex/test/regress/test_operators.cpp @@ -0,0 +1,176 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\ + && !BOOST_WORKAROUND(__HP_aCC, BOOST_TESTED_AT(55500))\ + && !(defined(__GNUC__) && (__GNUC__ < 3) && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))) + +template <class T1, class T2> +void test_less(const T1& t1, const T2& t2) +{ + if(!(t1 < t2)) + { + BOOST_REGEX_TEST_ERROR("Failed < comparison", char); + } + if(!(t1 <= t2)) + { + BOOST_REGEX_TEST_ERROR("Failed <= comparison", char); + } + if(!(t1 != t2)) + { + BOOST_REGEX_TEST_ERROR("Failed != comparison", char); + } + if(t1 == t2) + { + BOOST_REGEX_TEST_ERROR("Failed == comparison", char); + } + if(t1 >= t2) + { + BOOST_REGEX_TEST_ERROR("Failed >= comparison", char); + } + if(t1 > t2) + { + BOOST_REGEX_TEST_ERROR("Failed > comparison", char); + } +} + +template <class T1, class T2> +void test_greater(const T1& t1, const T2& t2) +{ + if(t1 < t2) + { + BOOST_REGEX_TEST_ERROR("Failed < comparison", char); + } + if(t1 <= t2) + { + BOOST_REGEX_TEST_ERROR("Failed <= comparison", char); + } + if(!(t1 != t2)) + { + BOOST_REGEX_TEST_ERROR("Failed != comparison", char); + } + if(t1 == t2) + { + BOOST_REGEX_TEST_ERROR("Failed == comparison", char); + } + if(!(t1 >= t2)) + { + BOOST_REGEX_TEST_ERROR("Failed >= comparison", char); + } + if(!(t1 > t2)) + { + BOOST_REGEX_TEST_ERROR("Failed > comparison", char); + } +} + +template <class T1, class T2> +void test_equal(const T1& t1, const T2& t2) +{ + if(t1 < t2) + { + BOOST_REGEX_TEST_ERROR("Failed < comparison", char); + } + if(!(t1 <= t2)) + { + BOOST_REGEX_TEST_ERROR("Failed <= comparison", char); + } + if(t1 != t2) + { + BOOST_REGEX_TEST_ERROR("Failed != comparison", char); + } + if(!(t1 == t2)) + { + BOOST_REGEX_TEST_ERROR("Failed == comparison", char); + } + if(!(t1 >= t2)) + { + BOOST_REGEX_TEST_ERROR("Failed >= comparison", char); + } + if(t1 > t2) + { + BOOST_REGEX_TEST_ERROR("Failed > comparison", char); + } +} + +template <class T1, class T2, class T3> +void test_plus(const T1& t1, const T2& t2, const T3& t3) +{ + if(t1 + t2 != t3) + { + BOOST_REGEX_TEST_ERROR("Failed addition", char); + } + if(t3 != t1 + t2) + { + BOOST_REGEX_TEST_ERROR("Failed addition", char); + } +} + +void test_operators() +{ + test_info<char>::set_typename("sub_match operators"); + + std::string s1("a"); + std::string s2("b"); + boost::sub_match<std::string::const_iterator> sub1, sub2; + sub1.first = s1.begin(); + sub1.second = s1.end(); + sub1.matched = true; + sub2.first = s2.begin(); + sub2.second = s2.end(); + sub2.matched = true; + + test_less(sub1, sub2); + test_less(sub1, s2.c_str()); + test_less(s1.c_str(), sub2); + test_less(sub1, *s2.c_str()); + test_less(*s1.c_str(), sub2); + test_less(sub1, s2); + test_less(s1, sub2); + test_greater(sub2, sub1); + test_greater(sub2, s1.c_str()); + test_greater(s2.c_str(), sub1); + test_greater(sub2, *s1.c_str()); + test_greater(*s2.c_str(), sub1); + test_greater(sub2, s1); + test_greater(s2, sub1); + test_equal(sub1, sub1); + test_equal(sub1, s1.c_str()); + test_equal(s1.c_str(), sub1); + test_equal(sub1, *s1.c_str()); + test_equal(*s1.c_str(), sub1); + test_equal(sub1, s1); + test_equal(s1, sub1); + test_plus(sub2, sub1, "ba"); + test_plus(sub2, s1.c_str(), "ba"); + test_plus(s2.c_str(), sub1, "ba"); + test_plus(sub2, *s1.c_str(), "ba"); + test_plus(*s2.c_str(), sub1, "ba"); + test_plus(sub2, s1, "ba"); + test_plus(s2, sub1, "ba"); +} + +#else + +#include <iostream> + +void test_operators() +{ + std::cout << + "\n<note>\n" + "This compiler version does not support the sub_match comparison operators\n" + "tests for these operators are not carried out\n" + "</note>\n"; +} + +#endif + diff --git a/libs/regex/test/regress/test_overloads.cpp b/libs/regex/test/regress/test_overloads.cpp new file mode 100644 index 0000000000..847cd4983a --- /dev/null +++ b/libs/regex/test/regress/test_overloads.cpp @@ -0,0 +1,56 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#define BOOST_REGEX_TEST(x)\ + if(!(x)){ BOOST_REGEX_TEST_ERROR("Error in: " BOOST_STRINGIZE(x), char); } + +void test_overloads() +{ + test_info<char>::set_typename("sub_match operators"); + + // test all the available overloads with *one* simple + // expression, doing all these tests with all the test + // cases would just take to long... + + boost::regex e("abc"); + std::string s("abc"); + const std::string& cs = s; + boost::smatch sm; + boost::cmatch cm; + // regex_match: + BOOST_REGEX_TEST(boost::regex_match(cs.begin(), cs.end(), sm, e)) + BOOST_REGEX_TEST(boost::regex_match(cs.begin(), cs.end(), sm, e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_match(cs.begin(), cs.end(), e)) + BOOST_REGEX_TEST(boost::regex_match(cs.begin(), cs.end(), e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_match(s.c_str(), cm, e)) + BOOST_REGEX_TEST(boost::regex_match(s.c_str(), cm, e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_match(s.c_str(), e)) + BOOST_REGEX_TEST(boost::regex_match(s.c_str(), e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_match(s, sm, e)) + BOOST_REGEX_TEST(boost::regex_match(s, sm, e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_match(s, e)) + BOOST_REGEX_TEST(boost::regex_match(s, e, boost::regex_constants::match_default)) + // regex_search: + BOOST_REGEX_TEST(boost::regex_search(cs.begin(), cs.end(), sm, e)) + BOOST_REGEX_TEST(boost::regex_search(cs.begin(), cs.end(), sm, e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_search(cs.begin(), cs.end(), e)) + BOOST_REGEX_TEST(boost::regex_search(cs.begin(), cs.end(), e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_search(s.c_str(), cm, e)) + BOOST_REGEX_TEST(boost::regex_search(s.c_str(), cm, e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_search(s.c_str(), e)) + BOOST_REGEX_TEST(boost::regex_search(s.c_str(), e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_search(s, sm, e)) + BOOST_REGEX_TEST(boost::regex_search(s, sm, e, boost::regex_constants::match_default)) + BOOST_REGEX_TEST(boost::regex_search(s, e)) + BOOST_REGEX_TEST(boost::regex_search(s, e, boost::regex_constants::match_default)) +} diff --git a/libs/regex/test/regress/test_partial_match.hpp b/libs/regex/test/regress/test_partial_match.hpp new file mode 100644 index 0000000000..51ae5b66ea --- /dev/null +++ b/libs/regex/test/regress/test_partial_match.hpp @@ -0,0 +1,389 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_regex_search.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Declares tests for regex search and iteration. + */ + +#ifndef BOOST_REGEX_REGRESS_REGEX_PARTIAL_MATCH_HPP +#define BOOST_REGEX_REGRESS_REGEX_PARTIAL_MATCH_HPP +#include "info.hpp" +// +// this file implements a test for a regular expression that should compile, +// followed by a search for that expression: +// +struct test_regex_search_tag{}; + +template <class BidirectionalIterator> +void test_sub_match(const boost::sub_match<BidirectionalIterator>& sub, BidirectionalIterator base, const int* answer_table, int i) +{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#endif + typedef typename boost::sub_match<BidirectionalIterator>::value_type charT; + if((sub.matched == 0) + && + !((i == 0) + && (test_info<charT>::match_options() & boost::match_partial)) ) + { + if(answer_table[2*i] >= 0) + { + BOOST_REGEX_TEST_ERROR( + "Sub-expression " << i + << " was not matched when it should have been.", charT); + } + } + else + { + if(boost::re_detail::distance(base, sub.first) != answer_table[2*i]) + { + BOOST_REGEX_TEST_ERROR( + "Error in start location of sub-expression " + << i << ", found " << boost::re_detail::distance(base, sub.first) + << ", expected " << answer_table[2*i] << ".", charT); + } + if(boost::re_detail::distance(base, sub.second) != answer_table[1+ 2*i]) + { + BOOST_REGEX_TEST_ERROR( + "Error in end location of sub-expression " + << i << ", found " << boost::re_detail::distance(base, sub.second) + << ", expected " << answer_table[1 + 2*i] << ".", charT); + } + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +} + +template <class BidirectionalIterator, class Allocator> +void test_result(const boost::match_results<BidirectionalIterator, Allocator>& what, BidirectionalIterator base, const int* answer_table) +{ + for(unsigned i = 0; i < what.size(); ++i) + { + test_sub_match(what[i], base, answer_table, i); + } +} + +template<class charT, class traits> +void test_simple_search(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + boost::match_results<const_iterator> what; + if(boost::regex_search( + search_text.begin(), + search_text.end(), + what, + r, + opts)) + { + test_result(what, search_text.begin(), answer_table); + // setting match_any should have no effect on the result returned: + if(!boost::regex_search( + search_text.begin(), + search_text.end(), + r, + opts|boost::regex_constants::match_any)) + { + BOOST_REGEX_TEST_ERROR("Expected match was not found when using the match_any flag.", charT); + } + } + else + { + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } + // setting match_any should have no effect on the result returned: + else if(boost::regex_search( + search_text.begin(), + search_text.end(), + r, + opts|boost::regex_constants::match_any)) + { + BOOST_REGEX_TEST_ERROR("Unexpected match was found when using the match_any flag.", charT); + } + } +} + +template<class charT, class traits> +void test_regex_iterator(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + typedef boost::regex_iterator<const_iterator, charT, traits> test_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + test_iterator start(search_text.begin(), search_text.end(), r, opts), end; + test_iterator copy(start); + const_iterator last_end = search_text.begin(); + while(start != end) + { + if(start != copy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", charT); + } + if(!(start == copy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", charT); + } + test_result(*start, search_text.begin(), answer_table); + // test $` and $' : + if(start->prefix().first != last_end) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for start of $`", charT); + } + if(start->prefix().second != (*start)[0].first) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for end of $`", charT); + } + if(start->prefix().matched != (start->prefix().first != start->prefix().second)) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for matched member of $`", charT); + } + if(start->suffix().first != (*start)[0].second) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for start of $'", charT); + } + if(start->suffix().second != search_text.end()) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for end of $'", charT); + } + if(start->suffix().matched != (start->suffix().first != start->suffix().second)) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for matched member of $'", charT); + } + last_end = (*start)[0].second; + ++start; + ++copy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } +} + +template<class charT, class traits> +void test_regex_token_iterator(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + typedef boost::regex_token_iterator<const_iterator, charT, traits> test_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + // + // we start by testing sub-expression 0: + // + test_iterator start(search_text.begin(), search_text.end(), r, 0, opts), end; + test_iterator copy(start); + while(start != end) + { + if(start != copy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", charT); + } + if(!(start == copy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", charT); + } + test_sub_match(*start, search_text.begin(), answer_table, 0); + ++start; + ++copy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } + // + // and now field spitting: + // + test_iterator start2(search_text.begin(), search_text.end(), r, -1, opts), end2; + test_iterator copy2(start2); + int last_end2 = 0; + answer_table = test_info<charT>::answer_table(); + while(start2 != end2) + { + if(start2 != copy2) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", charT); + } + if(!(start2 == copy2)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", charT); + } +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#endif + if(boost::re_detail::distance(search_text.begin(), start2->first) != last_end2) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of start of field split, found: " + << boost::re_detail::distance(search_text.begin(), start2->first) + << ", expected: " + << last_end2 + << ".", charT); + } + int expected_end = static_cast<int>(answer_table[0] < 0 ? search_text.size() : answer_table[0]); + if(boost::re_detail::distance(search_text.begin(), start2->second) != expected_end) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of end2 of field split, found: " + << boost::re_detail::distance(search_text.begin(), start2->second) + << ", expected: " + << expected_end + << ".", charT); + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + last_end2 = answer_table[1]; + ++start2; + ++copy2; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } +} + +template <class charT, class traits> +struct grep_test_predicate +{ + typedef typename std::basic_string<charT>::const_iterator test_iter; + + grep_test_predicate(test_iter b, const int* a) + : m_base(b), m_table(a) + {} + bool operator()(const boost::match_results<test_iter>& what) + { + test_result(what, m_base, m_table); + // move on the answer table to next set of answers; + if(*m_table != -2) + while(*m_table++ != -2){} + return true; + } +private: + test_iter m_base; + const int* m_table; +}; + +template<class charT, class traits> +void test_regex_grep(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + grep_test_predicate<charT, traits> pred(search_text.begin(), answer_table); + boost::regex_grep(pred, search_text.begin(), search_text.end(), r, opts); +} + +template<class charT, class traits> +void test_regex_match(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + boost::match_results<const_iterator> what; + if(answer_table[0] < 0) + { + if(boost::regex_match(search_text, r, opts)) + { + BOOST_REGEX_TEST_ERROR("boost::regex_match found a match when it should not have done so.", charT); + } + } + else + { + if((answer_table[0] > 0) && boost::regex_match(search_text, r, opts)) + { + BOOST_REGEX_TEST_ERROR("boost::regex_match found a match when it should not have done so.", charT); + } + else if((answer_table[0] == 0) && (answer_table[1] == static_cast<int>(search_text.size()))) + { + if(boost::regex_match( + search_text.begin(), + search_text.end(), + what, + r, + opts)) + { + test_result(what, search_text.begin(), answer_table); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } + } + } +} + +template<class charT, class traits> +void test(boost::basic_regex<charT, traits>& r, const test_regex_search_tag&) +{ + const std::basic_string<charT>& expression = test_info<charT>::expression(); + boost::regex_constants::syntax_option_type syntax_options = test_info<charT>::syntax_options(); + try{ + r.assign(expression, syntax_options); + if(r.status()) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << r.status(), charT); + } + test_simple_search(r); + test_regex_iterator(r); + test_regex_token_iterator(r); + test_regex_grep(r); + test_regex_match(r); + } + catch(const boost::bad_expression& e) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done: " << e.what(), charT); + } + catch(const std::runtime_error& r) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::runtime_error: " << r.what(), charT); + } + catch(const std::exception& r) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::exception: " << r.what(), charT); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected exception of unknown type", charT); + } + +} + + + +#endif + diff --git a/libs/regex/test/regress/test_perl_ex.cpp b/libs/regex/test/regress/test_perl_ex.cpp new file mode 100644 index 0000000000..9e1ddd30eb --- /dev/null +++ b/libs/regex/test/regress/test_perl_ex.cpp @@ -0,0 +1,928 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_options3(); + +void test_independent_subs() +{ + using namespace boost::regex_constants; + TEST_REGEX_SEARCH("(?>^abc)", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?>^abc)", perl, "def\nabc", match_default, make_array(4, 7, -2, -2)); + TEST_REGEX_SEARCH("(?>^abc)", perl, "defabc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?>.*/)foo", perl, "/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?>.*/)foo", perl, "/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo", match_default, make_array(0, 67, -2, -2)); + TEST_REGEX_SEARCH("(?>(\\.\\d\\d[1-9]?))\\d+", perl, "1.230003938", match_default, make_array(1, 11, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("(?>(\\.\\d\\d[1-9]?))\\d+", perl, "1.875000282", match_default, make_array(1, 11, 1, 5, -2, -2)); + TEST_REGEX_SEARCH("(?>(\\.\\d\\d[1-9]?))\\d+", perl, "1.235", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^((?>\\w+)|(?>\\s+))*$", perl, "now is the time for all good men to come to the aid of the party", match_default, make_array(0, 64, 59, 64, -2, -2)); + TEST_REGEX_SEARCH("^((?>\\w+)|(?>\\s+))*$", perl, "this is not a line with only words and spaces!", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((?>\\d+))(\\w)", perl, "12345a", match_default, make_array(0, 6, 0, 5, 5, 6, -2, -2)); + TEST_REGEX_SEARCH("((?>\\d+))(\\w)", perl, "12345+", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((?>\\d+))(\\d)", perl, "12345", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?>a+)b", perl, "aaab", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("((?>a+)b)", perl, "aaab", match_default, make_array(0, 4, 0, 4, -2, -2)); + TEST_REGEX_SEARCH("(?>(a+))b", perl, "aaab", match_default, make_array(0, 4, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?>b)+", perl, "aaabbbccc", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?>a+|b+|c+)*c", perl, "aaabbbbccccd", match_default, make_array(0, 8, -2, 8, 9, -2, 9, 10, -2, 10, 11, -2, -2)); + TEST_REGEX_SEARCH("((?>[^()]+)|\\([^()]*\\))+", perl, "((abc(ade)ufh()()x", match_default, make_array(2, 18, 17, 18, -2, -2)); + TEST_REGEX_SEARCH("\\(((?>[^()]+)|\\([^()]+\\))+\\)", perl, "(abc)", match_default, make_array(0, 5, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\(((?>[^()]+)|\\([^()]+\\))+\\)", perl, "(abc(def)xyz)", match_default, make_array(0, 13, 9, 12, -2, -2)); + TEST_REGEX_SEARCH("\\(((?>[^()]+)|\\([^()]+\\))+\\)", perl, "((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?>a*)*", perl, "a", match_default, make_array(0, 1, -2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("(?>a*)*", perl, "aa", match_default, make_array(0, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("(?>a*)*", perl, "aaaa", match_default, make_array(0, 4, -2, 4, 4, -2, -2)); + TEST_REGEX_SEARCH("(?>a*)*", perl, "a", match_default, make_array(0, 1, -2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("(?>a*)*", perl, "aaabcde", match_default, make_array(0, 3, -2, 3, 3, -2, 4, 4, -2, 5, 5, -2, 6, 6, -2, 7, 7, -2, -2)); + TEST_REGEX_SEARCH("((?>a*))*", perl, "aaaaa", match_default, make_array(0, 5, 5, 5, -2, 5, 5, 5, 5, -2, -2)); + TEST_REGEX_SEARCH("((?>a*))*", perl, "aabbaa", match_default, make_array(0, 2, 2, 2, -2, 2, 2, 2, 2, -2, 3, 3, 3, 3, -2, 4, 6, 6, 6, -2, 6, 6, 6, 6, -2, -2)); + TEST_REGEX_SEARCH("((?>a*?))*", perl, "aaaaa", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, 3, 3, 3, 3, -2, 4, 4, 4, 4, -2, 5, 5, 5, 5, -2, -2)); + TEST_REGEX_SEARCH("((?>a*?))*", perl, "aabbaa", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, 3, 3, 3, 3, -2, 4, 4, 4, 4, -2, 5, 5, 5, 5, -2, 6, 6, 6, 6, -2, -2)); + TEST_REGEX_SEARCH("word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword", perl, "word cat dog elephant mussel cow horse canary baboon snake shark otherword", match_default, make_array(0, 74, -2, -2)); + TEST_REGEX_SEARCH("word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword", perl, "word cat dog elephant mussel cow horse canary baboon snake shark", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("word (?>[a-zA-Z0-9]+ ){0,30}otherword", perl, "word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("word (?>[a-zA-Z0-9]+ ){0,30}otherword", perl, "word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I really really hope otherword", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((?>Z)+|A)+", perl, "ZABCDEFG", match_default, make_array(0, 2, 1, 2, -2, -2)); + TEST_INVALID_REGEX("((?>)+|A)+", perl); +} + +void test_conditionals() +{ + using namespace boost::regex_constants; + TEST_REGEX_SEARCH("(?:(a)|b)(?(1)A|B)", perl, "aA", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?:(a)|b)(?(1)A|B)", perl, "bB", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("(?:(a)|b)(?(1)A|B)", perl, "aB", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:(a)|b)(?(1)A|B)", perl, "bA", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(a)?(?(1)A)B", perl, "aAB", match_default, make_array(0, 3, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a)?(?(1)A)B", perl, "B", match_default, make_array(0, 1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(a)?(?(1)|A)B", perl, "aB", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(a)?(?(1)|A)B", perl, "AB", match_default, make_array(0, 2, -1, -1, -2, -2)); + + TEST_REGEX_SEARCH("^(a)?(?(1)a|b)+$", perl, "aa", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("^(a)?(?(1)a|b)+$", perl, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("^(a)?(?(1)a|b)+$", perl, "bb", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^(a)?(?(1)a|b)+$", perl, "ab", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("^(?(?=abc)\\w{3}:|\\d\\d)$", perl, "abc:", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("^(?(?=abc)\\w{3}:|\\d\\d)$", perl, "12", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^(?(?=abc)\\w{3}:|\\d\\d)$", perl, "123", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?(?=abc)\\w{3}:|\\d\\d)$", perl, "xyz", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("^(?(?!abc)\\d\\d|\\w{3}:)$", perl, "abc:", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("^(?(?!abc)\\d\\d|\\w{3}:)$", perl, "12", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^(?(?!abc)\\d\\d|\\w{3}:)$", perl, "123", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?(?!abc)\\d\\d|\\w{3}:)$", perl, "xyz", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?(?<=foo)bar|cat)", perl, "foobar", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?(?<=foo)bar|cat)", perl, "cat", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?(?<=foo)bar|cat)", perl, "fcat", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("(?(?<=foo)bar|cat)", perl, "focat", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("(?(?<=foo)bar|cat)", perl, "foocat", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?(?<!foo)cat|bar)", perl, "foobar", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?(?<!foo)cat|bar)", perl, "cat", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?(?<!foo)cat|bar)", perl, "fcat", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("(?(?<!foo)cat|bar)", perl, "focat", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("(?(?<!foo)cat|bar)", perl, "foocat", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(\\()?[^()]+(?(1)\\))", perl, "abcd", match_default, make_array(0, 4, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(\\()?[^()]+(?(1)\\))", perl, "(abcd)", match_default, make_array(0, 6, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(\\()?[^()]+(?(1)\\))", perl, "the quick (abcd) fox", match_default, make_array(0, 10, -1, -1, -2, 10, 16, 10, 11, -2, 16, 20, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(\\()?[^()]+(?(1)\\))", perl, "(abcd", match_default, make_array(1, 5, -1, -1, -2, -2)); + + TEST_REGEX_SEARCH("^(?(2)a|(1)(2))+$", perl, "12", match_default, make_array(0, 2, 0, 1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("^(?(2)a|(1)(2))+$", perl, "12a", match_default, make_array(0, 3, 0, 1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("^(?(2)a|(1)(2))+$", perl, "12aa", match_default, make_array(0, 4, 0, 1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("^(?(2)a|(1)(2))+$", perl, "1234", match_default, make_array(-2, -2)); + + TEST_INVALID_REGEX("(a)(?(1)a|b|c)", perl); + TEST_INVALID_REGEX("(?(?=a)a|b|c)", perl); + TEST_INVALID_REGEX("(?(1a)", perl); + TEST_INVALID_REGEX("(?:(a)|b)(?(", perl); + TEST_INVALID_REGEX("(?:(a)|b)(?(1", perl); + TEST_INVALID_REGEX("(?:(a)|b)(?(1)", perl); + TEST_INVALID_REGEX("(?:(a)|b)(?(a", perl); + TEST_INVALID_REGEX("(?:(a)|b)(?(?", perl); + TEST_INVALID_REGEX("(?:(a)|b)(?(?:", perl); + TEST_INVALID_REGEX("(?:(a)|b)(?(?<", perl); + TEST_INVALID_REGEX("(?:(a)|b)(?(?<a", perl); + + TEST_INVALID_REGEX("(?(?!#?)+)", perl); + TEST_INVALID_REGEX("(?(?=:-){0})", perl); + TEST_INVALID_REGEX("(?(123){1})", perl); + TEST_INVALID_REGEX("(?(?<=A)*)", perl); + TEST_INVALID_REGEX("(?(?<=A)+)", perl); + + TEST_INVALID_REGEX("(?<!*|^)", perl); + TEST_INVALID_REGEX("(?<!*|A)", perl); + TEST_INVALID_REGEX("(?<=?|A)", perl); + TEST_INVALID_REGEX("(?<=*|\\B)", perl); + TEST_INVALID_REGEX("(?<!a|bc)de", perl); + TEST_INVALID_REGEX("(?<=a|bc)de", perl); +} + +void test_options() +{ + // test the (?imsx) construct: + using namespace boost::regex_constants; + TEST_INVALID_REGEX("(?imsx", perl); + TEST_INVALID_REGEX("(?g", perl); + TEST_INVALID_REGEX("(?im-sx", perl); + TEST_INVALID_REGEX("(?im-sx:", perl); + TEST_INVALID_REGEX("(?-g)", perl); + TEST_REGEX_SEARCH("(?-m)^abc", perl, "abc\nabc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?m)^abc", perl|no_mod_m, "abc\nabc", match_default, make_array(0, 3, -2, 4, 7, -2, -2)); + TEST_REGEX_SEARCH("(?-m)^abc", perl, "abc\nabc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?m)^abc", perl|no_mod_m, "abc\nabc", match_default, make_array(0, 3, -2, 4, 7, -2, -2)); + + TEST_REGEX_SEARCH(" ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)", perl|mod_x, "ab c", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH(" ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)", perl|mod_x, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH(" ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)", perl|mod_x, "ab cde", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)", perl, "ab c", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)", perl, "ab cde", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ a\\ b[c ]d $", perl|mod_x, "a bcd", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("^ a\\ b[c ]d $", perl|mod_x, "a b d", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("^ a\\ b[c ]d $", perl|mod_x, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^ a\\ b[c ]d $", perl|mod_x, "ab d", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("^1234(?# test newlines\n inside)", perl|mod_x, "1234", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("^1234 #comment in extended re\n", perl|mod_x, "1234", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("#rhubarb\n abcd", perl|mod_x, "abcd", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("^1234 #comment in extended re\r\n", perl|mod_x, "1234", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("#rhubarb\r\n abcd", perl|mod_x, "abcd", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("^abcd#rhubarb", perl|mod_x, "abcd", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("^abcd#rhubarb", perl, "abcd#rhubarb", match_default, make_array(0, 12, -2, -2)); + TEST_REGEX_SEARCH("^a b\n\n c", perl|mod_x, "abc", match_default, make_array(0, 3, -2, -2)); + + TEST_REGEX_SEARCH("(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ", perl|mod_x, "12-sep-98", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ", perl|mod_x, "12-09-98", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) ", perl|mod_x, "sep-12-98", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^a (?#xxx) (?#yyy) {3}c", perl|mod_x, "aaac", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab", perl|mod_x, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH(" abc\\Q abc\\Eabc", perl|mod_x, "abc abcabc", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH(" abc\\Q abc\\Eabc", perl|mod_x, "abcabcabc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("abc#comment\n \\Q#not comment\n literal\\E", perl|mod_x, "abc#not comment\n literal", match_default, make_array(0, 27, -2, -2)); + TEST_REGEX_SEARCH("abc#comment\n \\Q#not comment\n literal", perl|mod_x, "abc#not comment\n literal", match_default, make_array(0, 27, -2, -2)); + TEST_REGEX_SEARCH("abc#comment\n \\Q#not comment\n literal\\E #more comment\n ", perl|mod_x, "abc#not comment\n literal", match_default, make_array(0, 27, -2, -2)); + TEST_REGEX_SEARCH("abc#comment\n \\Q#not comment\n literal\\E #more comment", perl|mod_x, "abc#not comment\n literal", match_default, make_array(0, 27, -2, -2)); + + TEST_REGEX_SEARCH("(a (?x)b c)d e", perl, "a bcd e", match_default, make_array(0, 7, 0, 4, -2, -2)); + TEST_REGEX_SEARCH("(a (?x)b c)d e", perl, "a b cd e", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a (?x)b c)d e", perl, "abcd e", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a (?x)b c)d e", perl, "a bcde", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a b(?x)c d (?-x)e f)", perl, "a bcde f", match_default, make_array(0, 8, 0, 8, -2, -2)); + TEST_REGEX_SEARCH("(a b(?x)c d (?-x)e f)", perl, "abcdef", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("a(?x: b c )d", perl, "XabcdY", match_default, make_array(1, 5, -2, -2)); + TEST_REGEX_SEARCH("a(?x: b c )d", perl, "Xa b c d Y", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((?x)x y z | a b c)", perl, "XabcY", match_default, make_array(1, 4, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("((?x)x y z | a b c)", perl, "AxyzB", match_default, make_array(1, 4, 1, 4, -2, -2)); + + TEST_REGEX_SEARCH("(a (?x)b c)d e", perl, "a bcd e", match_default, make_array(0, 7, 0, 4, -2, -2)); + TEST_REGEX_SEARCH("(a (?x)b c)d e", perl, "a b cd e", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a (?x)b c)d e", perl, "abcd e", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a (?x)b c)d e", perl, "a bcde", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a b(?x)c d (?-x)e f)", perl, "a bcde f", match_default, make_array(0, 8, 0, 8, -2, -2)); + TEST_REGEX_SEARCH("(a b(?x)c d (?-x)e f)", perl, "abcdef", match_default, make_array(-2, -2)); +} + +void test_options2() +{ + using namespace boost::regex_constants; + TEST_INVALID_REGEX("(?i-", perl); + TEST_INVALID_REGEX("(?i-s", perl); + TEST_INVALID_REGEX("(?i-sd)", perl); + TEST_REGEX_SEARCH("(a(?i)b)c", perl, "abc", match_default, make_array(0, 3, 0, 2, -2, -2)); + TEST_REGEX_SEARCH("(a(?i)b)c", perl, "aBc", match_default, make_array(0, 3, 0, 2, -2, -2)); + TEST_REGEX_SEARCH("(a(?i)b)c", perl, "abC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)b)c", perl, "aBC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)b)c", perl, "Abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)b)c", perl, "ABc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)b)c", perl, "ABC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)b)c", perl, "AbC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?i)[dh]og", perl, "hog", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?i)[dh]og", perl, "dog", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?i)[dh]og", perl, "Hog", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?i)[dh]og", perl, "Dog", match_default, make_array(0, 3, -2, -2)); + + TEST_REGEX_SEARCH("(a(?i)B)c", perl, "abc", match_default, make_array(0, 3, 0, 2, -2, -2)); + TEST_REGEX_SEARCH("(a(?i)B)c", perl, "aBc", match_default, make_array(0, 3, 0, 2, -2, -2)); + TEST_REGEX_SEARCH("(a(?i)B)c", perl, "abC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)B)c", perl, "aBC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)B)c", perl, "Abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)B)c", perl, "ABc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)B)c", perl, "ABC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?i)B)c", perl, "AbC", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("a(?i:b)c", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(?i:b)c", perl, "aBc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(?i:b)c", perl, "ABC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?i:b)c", perl, "abC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?i:b)c", perl, "aBC", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("a(?i:b)*c", perl, "aBc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a(?i:b)*c", perl, "aBBc", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a(?i:b)*c", perl, "aBC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?i:b)*c", perl, "aBBC", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("a(?=b(?i)c)\\w\\wd", perl, "abcd", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a(?=b(?i)c)\\w\\wd", perl, "abCd", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a(?=b(?i)c)\\w\\wd", perl, "aBCd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?=b(?i)c)\\w\\wd", perl, "abcD", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?s-i:more.*than).*million", perl|icase, "more than million", match_default, make_array(0, 17, -2, -2)); + TEST_REGEX_SEARCH("(?s-i:more.*than).*million", perl|icase, "more than MILLION", match_default, make_array(0, 17, -2, -2)); + TEST_REGEX_SEARCH("(?s-i:more.*than).*million", perl|icase, "more \n than Million", match_default, make_array(0, 19, -2, -2)); + TEST_REGEX_SEARCH("(?s-i:more.*than).*million", perl|icase, "MORE THAN MILLION", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?s-i:more.*than).*million", perl|icase|no_mod_s|no_mod_m, "more \n than \n million", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?:(?s-i)more.*than).*million", perl|icase, "more than million", match_default, make_array(0, 17, -2, -2)); + TEST_REGEX_SEARCH("(?:(?s-i)more.*than).*million", perl|icase, "more than MILLION", match_default, make_array(0, 17, -2, -2)); + TEST_REGEX_SEARCH("(?:(?s-i)more.*than).*million", perl|icase, "more \n than Million", match_default, make_array(0, 19, -2, -2)); + TEST_REGEX_SEARCH("(?:(?s-i)more.*than).*million", perl|icase, "MORE THAN MILLION", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:(?s-i)more.*than).*million", perl|icase|no_mod_s|no_mod_m, "more \n than \n million", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?>a(?i)b+)+c", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?>a(?i)b+)+c", perl, "aBbc", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("(?>a(?i)b+)+c", perl, "aBBc", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("(?>a(?i)b+)+c", perl, "Abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?>a(?i)b+)+c", perl, "abAb", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?>a(?i)b+)+c", perl, "abbC", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?=a(?i)b)\\w\\wc", perl, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?=a(?i)b)\\w\\wc", perl, "aBc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?=a(?i)b)\\w\\wc", perl, "Ab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?=a(?i)b)\\w\\wc", perl, "abC", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?=a(?i)b)\\w\\wc", perl, "aBC", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?<=a(?i)b)(\\w\\w)c", perl, "abxxc", match_default, make_array(2, 5, 2, 4, -2, -2)); + TEST_REGEX_SEARCH("(?<=a(?i)b)(\\w\\w)c", perl, "aBxxc", match_default, make_array(2, 5, 2, 4, -2, -2)); + TEST_REGEX_SEARCH("(?<=a(?i)b)(\\w\\w)c", perl, "Abxxc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?<=a(?i)b)(\\w\\w)c", perl, "ABxxc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?<=a(?i)b)(\\w\\w)c", perl, "abxxC", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?<=^.{4})(?:bar|cat)", perl, "fooocat", match_default, make_array(4, 7, -2, -2)); + TEST_REGEX_SEARCH("(?<=^.{4})(?:bar|cat)", perl, "foocat", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?<=^a{4})(?:bar|cat)", perl, "aaaacat", match_default, make_array(4, 7, -2, -2)); + TEST_REGEX_SEARCH("(?<=^a{4})(?:bar|cat)", perl, "aaacat", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?<=^[[:alpha:]]{4})(?:bar|cat)", perl, "aaaacat", match_default, make_array(4, 7, -2, -2)); + TEST_REGEX_SEARCH("(?<=^[[:alpha:]]{4})(?:bar|cat)", perl, "aaacat", match_default, make_array(-2, -2)); + + //TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abxyZZ", match_default, make_array(4, 6, -2, -2)); + //TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abXyZZ", match_default, make_array(4, 6, -2, -2)); + TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "ZZZ", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "zZZ", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "bZZ", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "BZZ", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "ZZ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abXYZZ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "zzz", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "bzz", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("((?-i)[[:lower:]])[[:lower:]]", perl|icase, "ab", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("((?-i)[[:lower:]])[[:lower:]]", perl|icase, "aB", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("((?-i)[[:lower:]])[[:lower:]]", perl|icase, "Ab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((?-i)[[:lower:]])[[:lower:]]", perl|icase, "AB", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("a(?-i)b", perl|icase, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a(?-i)b", perl|icase, "Ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a(?-i)b", perl|icase, "aB", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(?-i)b", perl|icase, "AB", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(?:(?-i)a)b", perl|icase, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("((?-i)a)b", perl|icase, "ab", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?:(?-i)a)b", perl|icase, "aB", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("((?-i)a)b", perl|icase, "aB", match_default, make_array(0, 2, 0, 1, -2, -2)); + + TEST_REGEX_SEARCH("(?:(?-i)a)b", perl|icase, "Ab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:(?-i)a)b", perl|icase, "aB", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("((?-i)a)b", perl|icase, "aB", match_default, make_array(0, 2, 0, 1, -2, -2)); + + TEST_REGEX_SEARCH("(?:(?-i)a)b", perl|icase, "Ab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:(?-i)a)b", perl|icase, "AB", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?-i:a)b", perl|icase, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("((?-i:a))b", perl|icase, "ab", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?-i:a)b", perl|icase, "aB", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("((?-i:a))b", perl|icase, "aB", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?-i:a)b", perl|icase, "AB", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?-i:a)b", perl|icase, "Ab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?-i:a)b", perl|icase, "aB", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("((?-i:a))b", perl|icase, "aB", match_default, make_array(0, 2, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?-i:a)b", perl|icase, "Ab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?-i:a)b", perl|icase, "AB", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((?-i:a.))b", perl|icase, "AB", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((?-i:a.))b", perl|icase, "A\nB", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((?s-i:a.))b", perl|icase, "a\nB", match_default, make_array(0, 3, 0, 2, -2, -2)); + + TEST_REGEX_SEARCH(".", perl, "\n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl, "\n", match_default|match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", perl|mod_s, "\n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl|mod_s, "\n", match_default|match_not_dot_newline, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(".", perl|no_mod_s, "\n", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH(".", perl|no_mod_s, "\n", match_default|match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?s).", perl, "\n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?s).", perl, "\n", match_default|match_not_dot_newline, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?-s).", perl, "\n", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?-s).", perl, "\n", match_default|match_not_dot_newline, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?-xism)d", perl, "d", match_default, make_array(0, 1, -2, -2)); + test_options3(); +} + +void test_options3() +{ + using namespace boost::regex_constants; + + TEST_REGEX_SEARCH(".+", perl, " \n ", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH(".+", perl, " \n ", match_default|match_not_dot_newline, make_array(0, 2, -2, 3, 5, -2, -2)); + TEST_REGEX_SEARCH(".+", perl|mod_s, " \n ", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH(".+", perl|mod_s, " \n ", match_default|match_not_dot_newline, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH(".+", perl|no_mod_s, " \n ", match_default, make_array(0, 2, -2, 3, 5, -2, -2)); + TEST_REGEX_SEARCH(".+", perl|no_mod_s, " \n ", match_default|match_not_dot_newline, make_array(0, 2, -2, 3, 5, -2, -2)); + TEST_REGEX_SEARCH("(?s).+", perl, " \n ", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("(?s).+", perl, " \n ", match_default|match_not_dot_newline, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("(?-s).+", perl, " \n ", match_default, make_array(0, 2, -2, 3, 5, -2, -2)); + TEST_REGEX_SEARCH("(?-s).+", perl, " \n ", match_default|match_not_dot_newline, make_array(0, 2, -2, 3, 5, -2, -2)); + + const char* big_expression = +" (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* # optional leading comment\n" +"(?: (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"|\n" +"\" (?: # opening quote...\n" +"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote\n" +"| # or\n" +"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)\n" +")* \" # closing quote\n" +") # initial word\n" +"(?: (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* \\. (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"|\n" +"\" (?: # opening quote...\n" +"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote\n" +"| # or\n" +"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)\n" +")* \" # closing quote\n" +") )* # further okay, if led by a period\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* @ (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"| \\[ # [\n" +"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff\n" +"\\] # ]\n" +") # initial subdomain\n" +"(?: #\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* \\. # if led by a period...\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"| \\[ # [\n" +"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff\n" +"\\] # ]\n" +") # ...further okay\n" +")*\n" +"# address\n" +"| # or\n" +"(?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"|\n" +"\" (?: # opening quote...\n" +"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote\n" +"| # or\n" +"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)\n" +")* \" # closing quote\n" +") # one word, optionally followed by....\n" +"(?:\n" +"[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] | # atom and space parts, or...\n" +"\\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) | # comments, or...\n" +"\" (?: # opening quote...\n" +"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote\n" +"| # or\n" +"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)\n" +")* \" # closing quote\n" +"# quoted strings\n" +")*\n" +"< (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* # leading <\n" +"(?: @ (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"| \\[ # [\n" +"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff\n" +"\\] # ]\n" +") # initial subdomain\n" +"(?: #\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* \\. # if led by a period...\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"| \\[ # [\n" +"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff\n" +"\\] # ]\n" +") # ...further okay\n" +")*\n" +"(?: (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* , (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* @ (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"| \\[ # [\n" +"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff\n" +"\\] # ]\n" +") # initial subdomain\n" +"(?: #\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* \\. # if led by a period...\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"| \\[ # [\n" +"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff\n" +"\\] # ]\n" +") # ...further okay\n" +")*\n" +")* # further okay, if led by comma\n" +": # closing colon\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* )? # optional route\n" +"(?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"|\n" +"\" (?: # opening quote...\n" +"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote\n" +"| # or\n" +"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)\n" +")* \" # closing quote\n" +") # initial word\n" +"(?: (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* \\. (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"|\n" +"\" (?: # opening quote...\n" +"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote\n" +"| # or\n" +"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)\n" +")* \" # closing quote\n" +") )* # further okay, if led by a period\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* @ (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"| \\[ # [\n" +"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff\n" +"\\] # ]\n" +") # initial subdomain\n" +"(?: #\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* \\. # if led by a period...\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* (?:\n" +"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...\n" +"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n" +"| \\[ # [\n" +"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff\n" +"\\] # ]\n" +") # ...further okay\n" +")*\n" +"# address spec\n" +"(?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* > # trailing >\n" +"# name and address\n" +") (?: [\\040\\t] | \\(\n" +"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*\n" +"\\) )* # optional trailing comment\n" +"\n"; + + do{ + test_info<char>::set_info(__FILE__, __LINE__, + big_expression, + perl|mod_x, "Alan Other <user@dom.ain>", match_default, + make_array(0, 25, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + do{ + std::string st(big_expression); + test_info<wchar_t>::set_info(__FILE__, __LINE__, + std::wstring(st.begin(), st.end()), + perl|mod_x, L"Alan Other <user@dom.ain>", match_default, + make_array(0, 25, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#endif + do{ + test_info<char>::set_info(__FILE__, __LINE__, + big_expression, + perl|mod_x, "<user@dom.ain>", match_default, + make_array(1, 13, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + do{ + std::string st(big_expression); + test_info<wchar_t>::set_info(__FILE__, __LINE__, + std::wstring(st.begin(), st.end()), + perl|mod_x, L"<user@dom.ain>", match_default, + make_array(1, 13, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#endif + do{ + test_info<char>::set_info(__FILE__, __LINE__, + big_expression, + perl|mod_x, "\"A. Other\" <user.1234@dom.ain> (a comment)", match_default, + make_array(0, 42, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + do{ + std::string st(big_expression); + test_info<wchar_t>::set_info(__FILE__, __LINE__, + std::wstring(st.begin(), st.end()), + perl|mod_x, L"\"A. Other\" <user.1234@dom.ain> (a comment)", match_default, + make_array(0, 42, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#endif + do{ + test_info<char>::set_info(__FILE__, __LINE__, + big_expression, + perl|mod_x, "A. Other <user.1234@dom.ain> (a comment)", match_default, + make_array(2, 40, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + do{ + std::string st(big_expression); + test_info<wchar_t>::set_info(__FILE__, __LINE__, + std::wstring(st.begin(), st.end()), + perl|mod_x, L"A. Other <user.1234@dom.ain> (a comment)", match_default, + make_array(2, 40, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#endif + do{ + test_info<char>::set_info(__FILE__, __LINE__, + big_expression, + perl|mod_x, "\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay", match_default, + make_array(0, 61, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + do{ + std::string st(big_expression); + test_info<wchar_t>::set_info(__FILE__, __LINE__, + std::wstring(st.begin(), st.end()), + perl|mod_x, L"\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay", match_default, + make_array(0, 61, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#endif + do{ + test_info<char>::set_info(__FILE__, __LINE__, + big_expression, + perl|mod_x, "A missing angle <user@some.where", match_default, + make_array(17, 32, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + do{ + std::string st(big_expression); + test_info<wchar_t>::set_info(__FILE__, __LINE__, + std::wstring(st.begin(), st.end()), + perl|mod_x, L"A missing angle <user@some.where", match_default, + make_array(17, 32, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#endif +} + +void test_mark_resets() +{ + using namespace boost::regex_constants; + + TEST_REGEX_SEARCH("(?|(abc)|(xyz))", perl, "abc", match_default, make_array(0, 3, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))", perl, "xyz", match_default, make_array(0, 3, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(x)(?|(abc)|(xyz))(x)", perl, "xabcx", match_default, make_array(0, 5, 0, 1, 1, 4, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("(x)(?|(abc)|(xyz))(x)", perl, "xxyzx", match_default, make_array(0, 5, 0, 1, 1, 4, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("(x)(?|(abc)(pqr)|(xyz))(x)", perl, "xabcpqrx", match_default, make_array(0, 8, 0, 1, 1, 4, 4, 7, 7, 8, -2, -2)); + TEST_REGEX_SEARCH("(x)(?|(abc)(pqr)|(xyz))(x)", perl, "xxyzx", match_default, make_array(0, 5, 0, 1, 1, 4, -1, -1, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))\\1", perl, "abcabc", match_default, make_array(0, 6, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))\\1", perl, "xyzxyz", match_default, make_array(0, 6, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))\\1", perl, "abcxyz", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))\\1", perl, "xyzabc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))(?1)", perl, "abcabc", match_default, make_array(0, 6, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))(?1)", perl, "xyzabc", match_default, make_array(0, 6, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))(?1)", perl, "xyzxyz", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^X(?5)(a)(?|(b)|(q))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_INVALID_REGEX("^X(?5)(a)(?|(b)|(q))(c)(d)Y", perl); + TEST_REGEX_SEARCH("^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_REGEX_SEARCH("^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_REGEX_SEARCH("^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_REGEX_SEARCH("^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(?:((?:xyz)))|(123))", perl, "abc", match_default, make_array(0, 3, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(?:)((?:)xyz)|(123))", perl, "xyz", match_default, make_array(0, 3, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|((?:(x)|(y)|(z)))|(123))", perl, "y", match_default, make_array(0, 1, 0, 1, -1, -1, 0, 1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|((?|(x)|(y)|(z)))|(123))", perl, "y", match_default, make_array(0, 1, 0, 1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|((?|(x)|(y)|(z)))|(123))", perl, "abc", match_default, make_array(0, 3, 0, 3, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|((?|(x)|(y)|(z)))|(123))", perl, "123", match_default, make_array(0, 3, 0, 3, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|((x)|(y)|(z))|(123))", perl, "z", match_default, make_array(0, 1, 0, 1, -1, -1, -1, -1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|((x)|(y)|(z))|(123))", perl, "abc", match_default, make_array(0, 3, 0, 3, -1, -1, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|((x)|(y)|(z))|(123))", perl, "123", match_default, make_array(0, 3, 0, 3, -1, -1, -1, -1, -1, -1, -2, -2)); +} + +void test_recursion() +{ + using namespace boost::regex_constants; + + TEST_INVALID_REGEX("(a(?2)b)", perl); + TEST_INVALID_REGEX("(a(?1b))", perl); + TEST_REGEX_SEARCH("(a(?1)b)", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(a(?1)+b)", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^([^()]|\\((?1)*\\))*$", perl, "abc", match_default, make_array(0, 3, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("^([^()]|\\((?1)*\\))*$", perl, "a(b)c", match_default, make_array(0, 5, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("^([^()]|\\((?1)*\\))*$", perl, "a(b(c))d", match_default, make_array(0, 8, 7, 8, -2, -2)); + TEST_REGEX_SEARCH("^([^()]|\\((?1)*\\))*$", perl, "a(b(c)d", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^>abc>([^()]|\\((?1)*\\))*<xyz<$", perl, ">abc>123<xyz<", match_default, make_array(0, 13, 7, 8, -2, -2)); + TEST_REGEX_SEARCH("^>abc>([^()]|\\((?1)*\\))*<xyz<$", perl, ">abc>1(2)3<xyz<", match_default, make_array(0, 15, 9, 10, -2, -2)); + TEST_REGEX_SEARCH("^>abc>([^()]|\\((?1)*\\))*<xyz<$", perl, ">abc>(1(2)3)<xyz<", match_default, make_array(0, 17, 5, 12, -2, -2)); + //TEST_REGEX_SEARCH("^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$", perl|icase, "1221", match_default, make_array(0, 4, 0, 4, 0, 1, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$", perl|icase, "Satan, oscillate my metallic sonatas!", match_default, make_array(0, 37, -1, -1, -1, -1, 0, 36, 0, 1, -2, -2)); + //TEST_REGEX_SEARCH("^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$", perl|icase, "A man, a plan, a canal: Panama!", match_default, make_array(0, 31, -1, -1, -1, -1, 0, 30, 0, 1, -2, -2)); + //TEST_REGEX_SEARCH("^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$", perl|icase, "Able was I ere I saw Elba.", match_default, make_array(0, 26, -1, -1, -1, -1, 0, 25, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$", perl|icase, "The quick brown fox", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$", perl|icase, "12", match_default, make_array(0, 2, 0, 2, -1, -1, -2, -2)); + //TEST_REGEX_SEARCH("^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$", perl|icase, "(((2+2)*-3)-7)", match_default, make_array(0, 14, 0, 14, 11, 12, -2, -2)); + TEST_REGEX_SEARCH("^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$", perl|icase, "-12", match_default, make_array(0, 3, 0, 3, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$", perl|icase, "((2+2)*-3)-7)", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(x(y|(?1){2})z)", perl|icase, "xyz", match_default, make_array(0, 3, 0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("^(x(y|(?1){2})z)", perl|icase, "xxyzxyzz", match_default, make_array(0, 8, 0, 8, 1, 7, -2, -2)); + TEST_REGEX_SEARCH("^(x(y|(?1){2})z)", perl|icase, "xxyzz", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(x(y|(?1){2})z)", perl|icase, "xxyzxyzxyzz", match_default, make_array(-2, -2)); + TEST_INVALID_REGEX("(?1)", perl); + TEST_INVALID_REGEX("((?2)(abc)", perl); + TEST_REGEX_SEARCH("^(a|b|c)=(?1)+", perl|icase, "a=a", match_default, make_array(0, 3, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("^(a|b|c)=(?1)+", perl|icase, "a=b", match_default, make_array(0, 3, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("^(a|b|c)=(?1)+", perl|icase, "a=bc", match_default, make_array(0, 4, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("^(a|b|c)=((?1))+", perl|icase, "a=a", match_default, make_array(0, 3, 0, 1, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("^(a|b|c)=((?1))+", perl|icase, "a=b", match_default, make_array(0, 3, 0, 1, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("^(a|b|c)=((?1))+", perl|icase, "a=bc", match_default, make_array(0, 4, 0, 1, 3, 4, -2, -2)); + TEST_REGEX_SEARCH("^(?1)(abc)", perl|icase, "abcabc", match_default, make_array(0, 6, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?1)X(?<abc>P)", perl|icase, "abcPXP123", match_default, make_array(3, 6, 5, 6, -2, -2)); + TEST_REGEX_SEARCH("(abc)(?i:(?1))", perl|icase, "defabcabcxyz", match_default, make_array(3, 9, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(abc)(?i:(?1))", perl, "DEFabcABCXYZ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(abc)(?i:(?1)abc)", perl, "DEFabcABCABCXYZ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(abc)(?:(?i)(?1))", perl, "defabcabcxyz", match_default, make_array(3, 9, 3, 6, -2, -2)); + TEST_REGEX_SEARCH("(abc)(?:(?i)(?1))", perl, "DEFabcABCXYZ", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))(?1)", perl, "abcabc", match_default, make_array(0, 6, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))(?1)", perl, "xyzabc", match_default, make_array(0, 6, 0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?|(abc)|(xyz))(?1)", perl, "xyzxyz", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?1)[]a()b](abc)", perl, "abcbabc", match_default, make_array(0, 7, 4, 7, -2, -2)); + TEST_REGEX_SEARCH("(?1)[]a()b](abc)", perl, "abcXabc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?1)[^]a()b](abc)", perl, "abcXabc", match_default, make_array(0, 7, 4, 7, -2, -2)); + TEST_REGEX_SEARCH("(?1)[^]a()b](abc)", perl, "abcbabc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?2)[]a()b](abc)(xyz)", perl, "xyzbabcxyz", match_default, make_array(0, 10, 4, 7, 7, 10, -2, -2)); + TEST_REGEX_SEARCH("^X(?5)(a)(?|(b)|(q))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_INVALID_REGEX("^X(?5)(a)(?|(b)|(q))(c)(d)Y", perl); + TEST_REGEX_SEARCH("^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_REGEX_SEARCH("^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_REGEX_SEARCH("^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\x{100}*(\\d+|\"(?1)\")", perl, L"1234", match_default, make_array(0, 4, 0, 4, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\x{100}*(\\d+|\"(?1)\")", perl, L"\"1234\"", match_default, make_array(0, 6, 0, 6, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\x{100}*(\\d+|\"(?1)\")", perl, L"\x100"L"1234", match_default, make_array(0, 5, 1, 5, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\x{100}*(\\d+|\"(?1)\")", perl, L"\"\x100"L"1234\"", match_default, make_array(1, 6, 2, 6, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\x{100}*(\\d+|\"(?1)\")", perl, L"\x100\x100"L"12ab", match_default, make_array(0, 4, 2, 4, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\x{100}*(\\d+|\"(?1)\")", perl, L"\x100\x100"L"\"12\"", match_default, make_array(0, 6, 2, 6, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\x{100}*(\\d+|\"(?1)\")", perl, L"\x100\x100"L"abcd", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("(ab|c)(?-1)", perl, "abc", match_default, make_array(0, 3, 0, 2, -2, -2)); + TEST_REGEX_SEARCH("xy(?+1)(abc)", perl, "xyabcabc", match_default, make_array(0, 8, 5, 8, -2, -2)); + TEST_REGEX_SEARCH("xy(?+1)(abc)", perl, "xyabc", match_default, make_array(-2, -2)); + TEST_INVALID_REGEX("x(?-0)y", perl); + TEST_INVALID_REGEX("x(?-1)y", perl); + TEST_INVALID_REGEX("x(?+0)y", perl); + TEST_INVALID_REGEX("x(?+1)y", perl); + TEST_REGEX_SEARCH("^(?+1)(?<a>x|y){0}z", perl, "xzxx", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("^(?+1)(?<a>x|y){0}z", perl, "yzyy", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("^(?+1)(?<a>x|y){0}z", perl, "xxz", match_default, make_array(-2, -2)); + + // Now recurse to sub-expression zero: + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "(abcd)", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "(abcd)xyz", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "xyz(abcd)", match_default, make_array(3, 9, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "(ab(xy)cd)pqr", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "(ab(xycd)pqr", match_default, make_array(3, 9, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "() abc ()", match_default, make_array(0, 2, -2, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "12(abcde(fsh)xyz(foo(bar))lmno)89", match_default, make_array(2, 31, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "abcd)", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?0))*\\)", perl, "(abcd", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("\\( ( (?>[^()]+) | (?0) )* \\) ", perl|mod_x, "(ab(xy)cd)pqr", match_default, make_array(0, 10, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( ( (?>[^()]+) | (?0) )* \\) ", perl|mod_x, "1(abcd)(x(y)z)pqr", match_default, make_array(1, 7, 2, 6, -2, 7, 14, 12, 13, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?0) ) \\) ", perl|mod_x, "(abcd)", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?0) ) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(3, 7, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?0) ) \\) ", perl|mod_x, "(a(b(c)d)e)", match_default, make_array(4, 7, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?0) ) \\) ", perl|mod_x, "((ab))", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?0) ) \\) ", perl|mod_x, "()", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?0) )? \\) ", perl|mod_x, "()", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?0) )? \\) ", perl|mod_x, "12(abcde(fsh)xyz(foo(bar))lmno)89", match_default, make_array(8, 13, -2, 20, 25, -2, -2)); + TEST_REGEX_SEARCH("\\( ( (?>[^()]+) | (?0) )* \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( ( ( (?>[^()]+) | (?0) )* ) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, 1, 9, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( (123)? ( ( (?>[^()]+) | (?0) )* ) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, -1, -1, 1, 9, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( (123)? ( ( (?>[^()]+) | (?0) )* ) \\) ", perl|mod_x, "(123ab(xy)cd)", match_default, make_array(0, 13, 1, 4, 4, 12, 10, 12, -2, -2)); + TEST_REGEX_SEARCH("\\( ( (123)? ( (?>[^()]+) | (?0) )* ) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, 1, 9, -1, -1, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( ( (123)? ( (?>[^()]+) | (?0) )* ) \\) ", perl|mod_x, "(123ab(xy)cd)", match_default, make_array(0, 13, 1, 12, 1, 4, 10, 12, -2, -2)); + TEST_REGEX_SEARCH("\\( (((((((((( ( (?>[^()]+) | (?0) )* )))))))))) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?0) )* ) \\) ", perl|mod_x, "(abcd(xyz<p>qrs)123)", match_default, make_array(0, 20, 1, 19, 16, 19, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("\\( ( ( (?>[^()]+) | ((?0)) )* ) \\) ", perl|mod_x, "(ab(cd)ef)", match_default, make_array(0, 10, 1, 9, 7, 9, 3, 7, -2, -2)); + TEST_REGEX_SEARCH("\\( ( ( (?>[^()]+) | ((?0)) )* ) \\) ", perl|mod_x, "(ab(cd(ef)gh)ij)", match_default, make_array(0, 16, 1, 15, 13, 15, 3, 13, -2, -2)); + // Again with (?R): + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "(abcd)", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "(abcd)xyz", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "xyz(abcd)", match_default, make_array(3, 9, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "(ab(xy)cd)pqr", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "(ab(xycd)pqr", match_default, make_array(3, 9, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "() abc ()", match_default, make_array(0, 2, -2, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "12(abcde(fsh)xyz(foo(bar))lmno)89", match_default, make_array(2, 31, -2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "abcd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "abcd)", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\((?:(?>[^()]+)|(?R))*\\)", perl, "(abcd", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("\\( ( (?>[^()]+) | (?R) )* \\) ", perl|mod_x, "(ab(xy)cd)pqr", match_default, make_array(0, 10, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( ( (?>[^()]+) | (?R) )* \\) ", perl|mod_x, "1(abcd)(x(y)z)pqr", match_default, make_array(1, 7, 2, 6, -2, 7, 14, 12, 13, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?R) ) \\) ", perl|mod_x, "(abcd)", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?R) ) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(3, 7, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?R) ) \\) ", perl|mod_x, "(a(b(c)d)e)", match_default, make_array(4, 7, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?R) ) \\) ", perl|mod_x, "((ab))", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?R) ) \\) ", perl|mod_x, "()", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?R) )? \\) ", perl|mod_x, "()", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\( (?: (?>[^()]+) | (?R) )? \\) ", perl|mod_x, "12(abcde(fsh)xyz(foo(bar))lmno)89", match_default, make_array(8, 13, -2, 20, 25, -2, -2)); + TEST_REGEX_SEARCH("\\( ( (?>[^()]+) | (?R) )* \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( ( ( (?>[^()]+) | (?R) )* ) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, 1, 9, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( (123)? ( ( (?>[^()]+) | (?R) )* ) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, -1, -1, 1, 9, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( (123)? ( ( (?>[^()]+) | (?R) )* ) \\) ", perl|mod_x, "(123ab(xy)cd)", match_default, make_array(0, 13, 1, 4, 4, 12, 10, 12, -2, -2)); + TEST_REGEX_SEARCH("\\( ( (123)? ( (?>[^()]+) | (?R) )* ) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, 1, 9, -1, -1, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( ( (123)? ( (?>[^()]+) | (?R) )* ) \\) ", perl|mod_x, "(123ab(xy)cd)", match_default, make_array(0, 13, 1, 12, 1, 4, 10, 12, -2, -2)); + TEST_REGEX_SEARCH("\\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \\) ", perl|mod_x, "(ab(xy)cd)", match_default, make_array(0, 10, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 7, 9, -2, -2)); + TEST_REGEX_SEARCH("\\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \\) ", perl|mod_x, "(abcd(xyz<p>qrs)123)", match_default, make_array(0, 20, 1, 19, 16, 19, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("\\( ( ( (?>[^()]+) | ((?R)) )* ) \\) ", perl|mod_x, "(ab(cd)ef)", match_default, make_array(0, 10, 1, 9, 7, 9, 3, 7, -2, -2)); + TEST_REGEX_SEARCH("\\( ( ( (?>[^()]+) | ((?R)) )* ) \\) ", perl|mod_x, "(ab(cd(ef)gh)ij)", match_default, make_array(0, 16, 1, 15, 13, 15, 3, 13, -2, -2)); + // And some extra cases: + TEST_REGEX_SEARCH("x(ab|(bc|(de|(?R))))", perl|mod_x, "xab", match_default, make_array(0, 3, 1, 3, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("x(ab|(bc|(de|(?R))))", perl|mod_x, "xbc", match_default, make_array(0, 3, 1, 3, 1, 3, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("x(ab|(bc|(de|(?R))))", perl|mod_x, "xde", match_default, make_array(0, 3, 1, 3, 1, 3, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("x(ab|(bc|(de|(?R))))", perl|mod_x, "xxab", match_default, make_array(0, 4, 1, 4, 1, 4, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("x(ab|(bc|(de|(?R))))", perl|mod_x, "xxxab", match_default, make_array(0, 5, 1, 5, 1, 5, 1, 5, -2, -2)); + TEST_REGEX_SEARCH("x(ab|(bc|(de|(?R))))", perl|mod_x, "xyab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[^()]*(?:\\((?R)\\)[^()]*)*", perl|mod_x, "(this(and)that)", match_default, make_array(0, 15, -2, 15, 15, -2, -2)); + TEST_REGEX_SEARCH("[^()]*(?:\\((?R)\\)[^()]*)*", perl|mod_x, "(this(and)that)stuff", match_default, make_array(0, 20, -2, 20, 20, -2, -2)); + TEST_REGEX_SEARCH("[^()]*(?:\\((?>(?R))\\)[^()]*)*", perl|mod_x, "(this(and)that)", match_default, make_array(0, 15, -2, 15, 15, -2, -2)); + + // More complex cases involving (?(R): + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<>", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abcd>", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc <123> hij>", match_default, make_array(0, 15, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc <def> hij>", match_default, make_array(5, 10, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc<>def>", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc<>", match_default, make_array(4, 6, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("((abc (?(R) (?(R1)1) (?(R2)2) X | (?1) (?2) (?R) ))) ", perl|mod_x, "abcabc1Xabc2XabcXabcabc", match_default, make_array(0, 17, 0, 17, 0, 17, -2, -2)); + + // Recursion to named sub-expressions: + //TEST_REGEX_SEARCH("^\\W*(?:(?<one>(?<two>.)\\W*(?&one)\\W*\\k<two>|)|(?<three>(?<four>.)\\W*(?&three)\\W*\\k'four'|\\W*.\\W*))\\W*$", perl|mod_x|icase, "Satan, oscillate my metallic sonatas!", match_default, make_array(0, 37, -1, -1, -1, -1, 0, 36, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?'abc'a|b)(?<doe>d|e)(?&abc){2}", perl|mod_x, "bdaa", match_default, make_array(0, 4, 0, 1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("(?'abc'a|b)(?<doe>d|e)(?&abc){2}", perl|mod_x, "bdab", match_default, make_array(0, 4, 0, 1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("(?'abc'a|b)(?<doe>d|e)(?&abc){2}", perl|mod_x, "bddd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?&abc)X(?<abc>P)", perl|mod_x, "abcPXP123", match_default, make_array(3, 6, 5, 6, -2, -2)); + TEST_REGEX_SEARCH("(?:a(?&abc)b)*(?<abc>x)", perl|mod_x, "123axbaxbaxbx456", match_default, make_array(3, 13, 12, 13 , -2, -2)); + TEST_REGEX_SEARCH("(?:a(?&abc)b){1,5}(?<abc>x)", perl|mod_x, "123axbaxbaxbx456", match_default, make_array(3, 13, 12, 13 , -2, -2)); + TEST_REGEX_SEARCH("(?:a(?&abc)b){2,5}(?<abc>x)", perl|mod_x, "123axbaxbaxbx456", match_default, make_array(3, 13, 12, 13 , -2, -2)); + TEST_REGEX_SEARCH("(?:a(?&abc)b){2,}(?<abc>x)", perl|mod_x, "123axbaxbaxbx456", match_default, make_array(3, 13, 12, 13 , -2, -2)); + TEST_INVALID_REGEX("(?<a>)(?&)", perl|mod_x); + TEST_INVALID_REGEX("(?<abc>)(?&a)", perl|mod_x); + TEST_INVALID_REGEX("(?<a>)(?&aaaaaaaaaaaaaaaaaaaaaaa)", perl|mod_x); + TEST_INVALID_REGEX("(?&N)[]a(?<N>)](?<M>abc)", perl|mod_x); + TEST_INVALID_REGEX("(?&N)[]a(?<N>)](abc)", perl|mod_x); + TEST_INVALID_REGEX("(?&N)[]a(?<N>)](abc)", perl|mod_x); + TEST_REGEX_SEARCH("^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)", perl|mod_x, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -2, -2)); + // And again with (?P> : + //TEST_REGEX_SEARCH("^\\W*(?:(?<one>(?<two>.)\\W*(?&one)\\W*\\k<two>|)|(?<three>(?<four>.)\\W*(?&three)\\W*\\k'four'|\\W*.\\W*))\\W*$", perl|mod_x|icase, "Satan, oscillate my metallic sonatas!", match_default, make_array(0, 37, -1, -1, -1, -1, 0, 36, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(?'abc'a|b)(?<doe>d|e)(?P>abc){2}", perl|mod_x, "bdaa", match_default, make_array(0, 4, 0, 1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("(?'abc'a|b)(?<doe>d|e)(?P>abc){2}", perl|mod_x, "bdab", match_default, make_array(0, 4, 0, 1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("(?'abc'a|b)(?<doe>d|e)(?P>abc){2}", perl|mod_x, "bddd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?P>abc)X(?<abc>P)", perl|mod_x, "abcPXP123", match_default, make_array(3, 6, 5, 6, -2, -2)); + TEST_REGEX_SEARCH("(?:a(?P>abc)b)*(?<abc>x)", perl|mod_x, "123axbaxbaxbx456", match_default, make_array(3, 13, 12, 13 , -2, -2)); + TEST_REGEX_SEARCH("(?:a(?P>abc)b){1,5}(?<abc>x)", perl|mod_x, "123axbaxbaxbx456", match_default, make_array(3, 13, 12, 13 , -2, -2)); + TEST_REGEX_SEARCH("(?:a(?P>abc)b){2,5}(?<abc>x)", perl|mod_x, "123axbaxbaxbx456", match_default, make_array(3, 13, 12, 13 , -2, -2)); + TEST_REGEX_SEARCH("(?:a(?P>abc)b){2,}(?<abc>x)", perl|mod_x, "123axbaxbaxbx456", match_default, make_array(3, 13, 12, 13 , -2, -2)); + TEST_INVALID_REGEX("(?<a>)(?P>)", perl|mod_x); + TEST_INVALID_REGEX("(?<abc>)(?P>a)", perl|mod_x); + TEST_INVALID_REGEX("(?<a>)(?P>aaaaaaaaaaaaaaaaaaaaaaa)", perl|mod_x); + TEST_INVALID_REGEX("(?P>N)[]a(?<N>)](?<M>abc)", perl|mod_x); + TEST_INVALID_REGEX("(?P>N)[]a(?<N>)](abc)", perl|mod_x); + TEST_INVALID_REGEX("(?P>N)[]a(?<N>)](abc)", perl|mod_x); + TEST_REGEX_SEARCH("^X(?P>N)(a)(?|(b)|(q))(c)(d)(?<N>Y)", perl|mod_x, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -2, -2)); + // Now check (?(R&NAME) : + TEST_REGEX_SEARCH("(?<A> (?'B' abc (?(R) (?(R&A)1) (?(R&B)2) X | (?1) (?2) (?R) ))) ", perl|mod_x, "abcabc1Xabc2XabcXabcabc", match_default, make_array(0, 17, 0, 17, 0, 17, -2, -2)); + TEST_INVALID_REGEX("(?<A> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X | (?1) (?2) (?R) ))) ", perl|mod_x); + TEST_REGEX_SEARCH("(?<1> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X | (?1) (?2) (?R) ))) ", perl|mod_x, "abcabc1Xabc2XabcXabcabc", match_default, make_array(0, 17, 0, 17, 0, 17, -2, -2)); + + // Now check for named conditionals: + TEST_REGEX_SEARCH("^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)", perl|mod_x, "abd", match_default, make_array(0, 3, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)", perl|mod_x, "ce", match_default, make_array(0, 2, -1, -1, -2, -2)); + + // Recursions in combination with (DEFINE): + TEST_REGEX_SEARCH("^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) ", perl|mod_x, "abcd", match_default, make_array(0, 2, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT)) (?(DEFINE) (?<NAME_PAT>[a-z]+) (?<ADDRESS_PAT>\\d+))", perl|mod_x, "metcalfe 33", match_default, make_array(0, 11, 0, 8, 9, 11, -1, -1, -1, -1, -2, -2)); + TEST_INVALID_REGEX("^(?(DEFINE) abc | xyz ) ", perl|mod_x); + //TEST_INVALID_REGEX("(?(DEFINE) abc){3} xyz", perl|mod_x); + TEST_REGEX_SEARCH("(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}", perl|mod_x, "1.2.3.4", match_default, make_array(0, 7, -1, -1, 5, 7, -2, -2)); + TEST_REGEX_SEARCH("(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}", perl|mod_x, "131.111.10.206", match_default, make_array(0, 14, -1, -1, 10, 14, -2, -2)); + TEST_REGEX_SEARCH("(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}", perl|mod_x, "10.0.0.0", match_default, make_array(0, 8, -1, -1, 6, 8, -2, -2)); + TEST_REGEX_SEARCH("(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}", perl|mod_x, "10.6", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}", perl|mod_x, "455.3.4.5", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))", perl|mod_x, "1.2.3.4", match_default, make_array(0, 7, 5, 7, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))", perl|mod_x, "131.111.10.206", match_default, make_array(0, 14, 10, 14, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))", perl|mod_x, "10.0.0.0", match_default, make_array(0, 8, 6, 8, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))", perl|mod_x, "10.6", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))", perl|mod_x, "455.3.4.5", match_default, make_array(-2, -2)); + + // Bugs: + TEST_REGEX_SEARCH("namespace\\s+(\\w+)\\s+(\\{(?:[^{}]*(?:(?2)[^{}]*)*)?\\})", perl, "namespace one { namespace two { int foo(); } }", match_default, make_array(0, 46, 10, 13, 14, 46, -2, -2)); + TEST_REGEX_SEARCH("namespace\\s+(\\w+)\\s+(\\{(?:[^{}]*(?:(?2)[^{}]*)*)?\\})", perl, "namespace one { namespace two { int foo(){} } { {{{ } } } } {}}", match_default, make_array(0, 64, 10, 13, 14, 64, -2, -2)); + TEST_INVALID_REGEX("((?1)|a)", perl); + + // Recursion to a named sub with a name that is used multiple times: + TEST_REGEX_SEARCH("(?:(?<A>a+)|(?<A>b+))\\.(?&A)", perl, "aaaa.aa", match_default, make_array(0, 7, 0, 4, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(?:(?<A>a+)|(?<A>b+))\\.(?&A)", perl, "bbbb.aa", match_default, make_array(0, 7, -1, -1, 0, 4, -2, -2)); + TEST_REGEX_SEARCH("(?:(?<A>a+)|(?<A>b+))\\.(?&A)", perl, "bbbb.bb", match_default, make_array(-2, -2)); + // Back reference to a named sub with a name that is used multiple times: + TEST_REGEX_SEARCH("(?:(?<A>a+)|(?<A>b+))\\.\\k<A>", perl, "aaaa.aaaa", match_default, make_array(0, 9, 0, 4, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(?:(?<A>a+)|(?<A>b+))\\.\\k<A>", perl, "bbbb.aaaa", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:(?<A>a+)|(?<A>b+))\\.\\k<A>", perl, "aaaa.bbbb", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:(?<A>a+)|(?<A>b+))\\.\\k<A>", perl, "bbbb.bbbb", match_default, make_array(0, 9, -1, -1, 0, 4, -2, -2)); + TEST_REGEX_SEARCH("(?:(?<A>a+)|(?<A>b+)|c+)\\.\\k<A>", perl, "cccc.cccc", match_default, make_array(-2, -2)); +} + diff --git a/libs/regex/test/regress/test_regex_replace.hpp b/libs/regex/test/regress/test_regex_replace.hpp new file mode 100644 index 0000000000..2165d7d1a0 --- /dev/null +++ b/libs/regex/test/regress/test_regex_replace.hpp @@ -0,0 +1,75 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_regex_replace.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Declares tests for regex search and replace. + */ + +#ifndef BOOST_REGEX_REGRESS_REGEX_REPLACE_HPP +#define BOOST_REGEX_REGRESS_REGEX_REPLACE_HPP +#include "info.hpp" + +template<class charT, class traits> +void test_regex_replace(boost::basic_regex<charT, traits>& r) +{ + typedef std::basic_string<charT> string_type; + const string_type& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const string_type& format_string = test_info<charT>::format_string(); + const string_type& result_string = test_info<charT>::result_string(); + + string_type result = boost::regex_replace(search_text, r, format_string, opts); + if(result != result_string) + { + BOOST_REGEX_TEST_ERROR("regex_replace generated an incorrect string result", charT); + } +} + + +struct test_regex_replace_tag{}; + +template<class charT, class traits> +void test(boost::basic_regex<charT, traits>& r, const test_regex_replace_tag&) +{ + const std::basic_string<charT>& expression = test_info<charT>::expression(); + boost::regex_constants::syntax_option_type syntax_options = test_info<charT>::syntax_options(); + try{ + r.assign(expression, syntax_options); + if(r.status()) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << r.status(), charT); + } + test_regex_replace(r); + } + catch(const boost::bad_expression& e) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done: " << e.what(), charT); + } + catch(const std::runtime_error& e) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::runtime_error: " << e.what(), charT); + } + catch(const std::exception& e) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::exception: " << e.what(), charT); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected exception of unknown type", charT); + } + +} + +#endif + diff --git a/libs/regex/test/regress/test_regex_search.hpp b/libs/regex/test/regress/test_regex_search.hpp new file mode 100644 index 0000000000..ff70d76558 --- /dev/null +++ b/libs/regex/test/regress/test_regex_search.hpp @@ -0,0 +1,544 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_regex_search.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Declares tests for regex search and iteration. + */ + +#ifndef BOOST_REGEX_REGRESS_REGEX_SEARCH_HPP +#define BOOST_REGEX_REGRESS_REGEX_SEARCH_HPP +#include "info.hpp" +#ifdef TEST_ROPE +#include <rope> +#endif +// +// this file implements a test for a regular expression that should compile, +// followed by a search for that expression: +// +struct test_regex_search_tag{}; + +template <class BidirectionalIterator> +void test_sub_match(const boost::sub_match<BidirectionalIterator>& sub, BidirectionalIterator base, const int* answer_table, int i, bool recurse = true) +{ +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#endif + if(recurse) + { + boost::sub_match<BidirectionalIterator> copy(sub); + test_sub_match(copy, base, answer_table, i, false); + } + typedef typename boost::sub_match<BidirectionalIterator>::value_type charT; + if((sub.matched == 0) + && + !((i == 0) + && (test_info<charT>::match_options() & boost::match_partial)) ) + { + if(answer_table[2*i] >= 0) + { + BOOST_REGEX_TEST_ERROR( + "Sub-expression " << i + << " was not matched when it should have been.", charT); + } + } + else + { + if(boost::re_detail::distance(base, sub.first) != answer_table[2*i]) + { + BOOST_REGEX_TEST_ERROR( + "Error in start location of sub-expression " + << i << ", found " << boost::re_detail::distance(base, sub.first) + << ", expected " << answer_table[2*i] << ".", charT); + } + if(boost::re_detail::distance(base, sub.second) != answer_table[1+ 2*i]) + { + BOOST_REGEX_TEST_ERROR( + "Error in end location of sub-expression " + << i << ", found " << boost::re_detail::distance(base, sub.second) + << ", expected " << answer_table[1 + 2*i] << ".", charT); + } + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +} + +template <class BidirectionalIterator, class Allocator> +void test_result(const boost::match_results<BidirectionalIterator, Allocator>& what, BidirectionalIterator base, const int* answer_table, bool recurse = true) +{ + if(recurse) + { + boost::match_results<BidirectionalIterator, Allocator> copy(what); + test_result(copy, base, answer_table, false); + boost::match_results<BidirectionalIterator, Allocator> s; + s.swap(copy); + test_result(s, base, answer_table, false); + boost::match_results<BidirectionalIterator, Allocator> s2; + s2 = what; + test_result(s2, base, answer_table, false); + } + for(unsigned i = 0; i < what.size(); ++i) + { + test_sub_match(what[i], base, answer_table, i); + } +} + +template<class charT, class traits> +void test_simple_search(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + boost::match_results<const_iterator> what; + if(boost::regex_search( + search_text.begin(), + search_text.end(), + what, + r, + opts)) + { + test_result(what, search_text.begin(), answer_table); + // setting match_any should have no effect on the result returned: + if(!boost::regex_search( + search_text.begin(), + search_text.end(), + r, + opts|boost::regex_constants::match_any)) + { + BOOST_REGEX_TEST_ERROR("Expected match was not found when using the match_any flag.", charT); + } + } + else + { + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } + // setting match_any should have no effect on the result returned: + else if(boost::regex_search( + search_text.begin(), + search_text.end(), + r, + opts|boost::regex_constants::match_any)) + { + BOOST_REGEX_TEST_ERROR("Unexpected match was found when using the match_any flag.", charT); + } + } +#ifdef TEST_ROPE + std::rope<charT> rsearch_text; + for(unsigned i = 0; i < search_text.size(); ++i) + { + std::rope<charT> c(search_text[i]); + if(++i != search_text.size()) + { + c.append(search_text[i]); + if(++i != search_text.size()) + { + c.append(search_text[i]); + } + } + rsearch_text.append(c); + } + boost::match_results<std::rope<charT>::const_iterator> rwhat; + if(boost::regex_search( + rsearch_text.begin(), + rsearch_text.end(), + rwhat, + r, + opts)) + { + test_result(rwhat, rsearch_text.begin(), answer_table); + } + else + { + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } + } +#endif +} + +template<class charT, class traits> +void test_regex_iterator(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + typedef boost::regex_iterator<const_iterator, charT, traits> test_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + test_iterator start(search_text.begin(), search_text.end(), r, opts), end; + test_iterator copy(start); + const_iterator last_end = search_text.begin(); + while(start != end) + { + if(start != copy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", charT); + } + if(!(start == copy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", charT); + } + test_result(*start, search_text.begin(), answer_table); + // test $` and $' : + if(start->prefix().first != last_end) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for start of $`", charT); + } + if(start->prefix().second != (*start)[0].first) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for end of $`", charT); + } + if(start->prefix().matched != (start->prefix().first != start->prefix().second)) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for matched member of $`", charT); + } + if(start->suffix().first != (*start)[0].second) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for start of $'", charT); + } + if(start->suffix().second != search_text.end()) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for end of $'", charT); + } + if(start->suffix().matched != (start->suffix().first != start->suffix().second)) + { + BOOST_REGEX_TEST_ERROR("Incorrect position for matched member of $'", charT); + } + last_end = (*start)[0].second; + ++start; + ++copy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } +} + +template<class charT, class traits> +void test_regex_token_iterator(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + typedef boost::regex_token_iterator<const_iterator, charT, traits> test_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + // + // we start by testing sub-expression 0: + // + test_iterator start(search_text.begin(), search_text.end(), r, 0, opts), end; + test_iterator copy(start); + while(start != end) + { + if(start != copy) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", charT); + } + if(!(start == copy)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", charT); + } + test_sub_match(*start, search_text.begin(), answer_table, 0); + ++start; + ++copy; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } + // + // and now field spitting: + // + test_iterator start2(search_text.begin(), search_text.end(), r, -1, opts), end2; + test_iterator copy2(start2); + int last_end2 = 0; + answer_table = test_info<charT>::answer_table(); + while(start2 != end2) + { + if(start2 != copy2) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", charT); + } + if(!(start2 == copy2)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", charT); + } +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#endif + if(boost::re_detail::distance(search_text.begin(), start2->first) != last_end2) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of start of field split, found: " + << boost::re_detail::distance(search_text.begin(), start2->first) + << ", expected: " + << last_end2 + << ".", charT); + } + int expected_end = static_cast<int>(answer_table[0] < 0 ? search_text.size() : answer_table[0]); + if(boost::re_detail::distance(search_text.begin(), start2->second) != expected_end) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of end2 of field split, found: " + << boost::re_detail::distance(search_text.begin(), start2->second) + << ", expected: " + << expected_end + << ".", charT); + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + last_end2 = answer_table[1]; + ++start2; + ++copy2; + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + // + // and now both field splitting and $0: + // + std::vector<int> subs; + subs.push_back(-1); + subs.push_back(0); + start2 = test_iterator(search_text.begin(), search_text.end(), r, subs, opts); + copy2 = start2; + last_end2 = 0; + answer_table = test_info<charT>::answer_table(); + while(start2 != end2) + { + if(start2 != copy2) + { + BOOST_REGEX_TEST_ERROR("Failed iterator != comparison.", charT); + } + if(!(start2 == copy2)) + { + BOOST_REGEX_TEST_ERROR("Failed iterator == comparison.", charT); + } +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4244) +#endif + if(boost::re_detail::distance(search_text.begin(), start2->first) != last_end2) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of start of field split, found: " + << boost::re_detail::distance(search_text.begin(), start2->first) + << ", expected: " + << last_end2 + << ".", charT); + } + int expected_end = static_cast<int>(answer_table[0] < 0 ? search_text.size() : answer_table[0]); + if(boost::re_detail::distance(search_text.begin(), start2->second) != expected_end) + { + BOOST_REGEX_TEST_ERROR( + "Error in location of end2 of field split, found: " + << boost::re_detail::distance(search_text.begin(), start2->second) + << ", expected: " + << expected_end + << ".", charT); + } +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + last_end2 = answer_table[1]; + ++start2; + ++copy2; + if((start2 == end2) && (answer_table[0] >= 0)) + { + BOOST_REGEX_TEST_ERROR( + "Expected $0 match not found", charT); + } + if(start2 != end2) + { + test_sub_match(*start2, search_text.begin(), answer_table, 0); + ++start2; + ++copy2; + } + // move on the answer table to next set of answers; + if(*answer_table != -2) + while(*answer_table++ != -2){} + } + if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } +#endif +} + +template <class charT, class traits> +struct grep_test_predicate +{ + typedef typename std::basic_string<charT>::const_iterator test_iter; + + grep_test_predicate(test_iter b, const int* a) + : m_base(b), m_table(a) + {} + bool operator()(const boost::match_results<test_iter>& what) + { + test_result(what, m_base, m_table); + // move on the answer table to next set of answers; + if(*m_table != -2) + while(*m_table++ != -2){} + return true; + } +private: + test_iter m_base; + const int* m_table; +}; + +template<class charT, class traits> +void test_regex_grep(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + grep_test_predicate<charT, traits> pred(search_text.begin(), answer_table); + boost::regex_grep(pred, search_text.begin(), search_text.end(), r, opts); +} + +template<class charT, class traits> +void test_regex_match(boost::basic_regex<charT, traits>& r) +{ + typedef typename std::basic_string<charT>::const_iterator const_iterator; + const std::basic_string<charT>& search_text = test_info<charT>::search_text(); + boost::regex_constants::match_flag_type opts = test_info<charT>::match_options(); + const int* answer_table = test_info<charT>::answer_table(); + boost::match_results<const_iterator> what; + if(answer_table[0] < 0) + { + if(boost::regex_match(search_text, r, opts)) + { + BOOST_REGEX_TEST_ERROR("boost::regex_match found a match when it should not have done so.", charT); + } + } + else + { + if((answer_table[0] > 0) && boost::regex_match(search_text, r, opts)) + { + BOOST_REGEX_TEST_ERROR("boost::regex_match found a match when it should not have done so.", charT); + } + else if((answer_table[0] == 0) && (answer_table[1] == static_cast<int>(search_text.size()))) + { + if(boost::regex_match( + search_text.begin(), + search_text.end(), + what, + r, + opts)) + { + test_result(what, search_text.begin(), answer_table); + } + else if(answer_table[0] >= 0) + { + // we should have had a match but didn't: + BOOST_REGEX_TEST_ERROR("Expected match was not found.", charT); + } + } + } +} + +template<class charT, class traits> +void test(boost::basic_regex<charT, traits>& r, const test_regex_search_tag&) +{ + const std::basic_string<charT>& expression = test_info<charT>::expression(); + boost::regex_constants::syntax_option_type syntax_options = test_info<charT>::syntax_options(); + try{ + r.assign(expression, syntax_options); + if(r.status()) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << r.status(), charT); + } + test_simple_search(r); + test_regex_iterator(r); + test_regex_token_iterator(r); + test_regex_grep(r); + test_regex_match(r); + // + // Verify sub-expression locations: + // + if((syntax_options & boost::regbase::save_subexpression_location) == 0) + { + bool have_except = false; + try + { + r.subexpression(1); + } + catch(const std::out_of_range&) + { + have_except = true; + } + if(!have_except) + { + BOOST_REGEX_TEST_ERROR("Expected std::out_of_range error was not found.", charT); + } + } + r.assign(expression, syntax_options | boost::regbase::save_subexpression_location); + for(std::size_t i = 1; i < r.mark_count(); ++i) + { + std::pair<const charT*, const charT*> p = r.subexpression(i); + if(*p.first != '(') + { + BOOST_REGEX_TEST_ERROR("Starting location of sub-expression " << i << " iterator was invalid.", charT); + } + if(*p.second != ')') + { + BOOST_REGEX_TEST_ERROR("Ending location of sub-expression " << i << " iterator was invalid.", charT); + } + } + } + catch(const boost::bad_expression& e) + { + BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done: " << e.what(), charT); + } + catch(const std::runtime_error& e) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::runtime_error: " << e.what(), charT); + } + catch(const std::exception& e) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected std::exception: " << e.what(), charT); + } + catch(...) + { + BOOST_REGEX_TEST_ERROR("Received an unexpected exception of unknown type", charT); + } + +} + + + +#endif diff --git a/libs/regex/test/regress/test_replace.cpp b/libs/regex/test/regress/test_replace.cpp new file mode 100644 index 0000000000..2d8724eb52 --- /dev/null +++ b/libs/regex/test/regress/test_replace.cpp @@ -0,0 +1,194 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_replace() +{ + using namespace boost::regex_constants; + // start by testing subs: + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$`", "..."); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$'", ",,,"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$&", "aaa"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$0", "aaa"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$1", ""); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$15", ""); + TEST_REGEX_REPLACE("(a+)b+", perl, "...aaabbb,,,", match_default|format_no_copy, "$1", "aaa"); + TEST_REGEX_REPLACE("[[:digit:]]*", perl, "123ab", match_default|format_no_copy, "<$0>", "<123><><><>"); + TEST_REGEX_REPLACE("[[:digit:]]*", perl, "123ab1", match_default|format_no_copy, "<$0>", "<123><><><1><>"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$`$", "...$"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "(?1x:y)", "(?1x:y)"); + // and now escapes: + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$x", "$x"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\a", "\a"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\f", "\f"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\n", "\n"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\r", "\r"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\t", "\t"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\v", "\v"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\", "\\"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\x21", "!"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\xz", "xz"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\x", "x"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\x{z}", "x{z}"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\x{12b", "x{12b"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\x{21}", "!"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\c@", "\0"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\c", "c"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\e", "\x1B"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "\\0101", "A"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default|format_no_copy, "\\u$1", "Aaa"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default|format_no_copy, "\\U$1", "AAA"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default|format_no_copy, "\\U$1\\E$1", "AAAaaa"); + TEST_REGEX_REPLACE("(A+)", perl, "...AAA,,,", match_default|format_no_copy, "\\l$1", "aAA"); + TEST_REGEX_REPLACE("(A+)", perl, "...AAA,,,", match_default|format_no_copy, "\\L$1", "aaa"); + TEST_REGEX_REPLACE("(A+)", perl, "...AAA,,,", match_default|format_no_copy, "\\L$1\\E$1", "aaaAAA"); + TEST_REGEX_REPLACE("\\w+", perl, "fee FOO FAR bAR", match_default|format_perl, "\\L\\u$0", "Fee Foo Far Bar"); + // sed format sequences: + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "\\0", "aabb"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "\\1", "aa"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "\\2", "bb"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "&", "aabb"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "$", "$"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "$1", "$1"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "()?:", "()?:"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "\\\\", "\\"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "\\&", "&"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_sed|format_no_copy, "\\l\\u\\L\\U\\E", "luLUE"); + + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "$0", "aabb"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "$1", "aa"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "$2", "bb"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "$&", "aabb"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "$$", "$"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "&", "&"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "\\0", "\0"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "()?:", "()?:"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,", match_default|format_perl|format_no_copy, "\\0101", "A"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "\\1", "aa"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, " ...aabb,,", match_default|format_perl|format_no_copy, "\\2", "bb"); + + // move to copying unmatched data: + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_all, "bbb", "...bbb,,,"); + TEST_REGEX_REPLACE("a+(b+)", perl, "...aaabb,,,", match_default|format_all, "$1", "...bb,,,"); + TEST_REGEX_REPLACE("a+(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "$1", "...bb,,,b*bbb?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?1A)(?2B)", "...AB,,,AB*AB?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "?1A:B", "...AB,,,AB*AB?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?1A:B)C", "...ACBC,,,ACBC*ACBC?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "?1:B", "...B,,,B*B?"); + + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?{1}A)(?{2}B)", "...AB,,,AB*AB?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "?{1}A:B", "...AB,,,AB*AB?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?{1}A:B)C", "...ACBC,,,ACBC*ACBC?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "?{1}:B", "...B,,,B*B?"); + TEST_REGEX_REPLACE("(?<one>a+)|(?<two>b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?{one}A)(?{two}B)", "...AB,,,AB*AB?"); + TEST_REGEX_REPLACE("(?<one>a+)|(?<two>b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "?{one}A:B", "...AB,,,AB*AB?"); + TEST_REGEX_REPLACE("(?<one>a+)|(?<two>b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?{one}A:B)C", "...ACBC,,,ACBC*ACBC?"); + TEST_REGEX_REPLACE("(?<one>a+)|(?<two>b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "?{one}:B", "...B,,,B*B?"); + + // move to copying unmatched data, but replace first occurance only: + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_all|format_first_only, "bbb", "...bbb,,,"); + TEST_REGEX_REPLACE("a+(b+)", perl, "...aaabb,,,", match_default|format_all|format_first_only, "$1", "...bb,,,"); + TEST_REGEX_REPLACE("a+(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all|format_first_only, "$1", "...bb,,,ab*abbb?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all|format_first_only, "(?1A)(?2B)", "...Abb,,,ab*abbb?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "?1A", "...A,,,A*A?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "?1:B", "...B,,,B*B?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?1A:(?2B))", "...AB,,,AB*AB?"); + TEST_REGEX_REPLACE("X", literal, "XX", match_default, "Y", "YY"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?", "...??,,,??*???"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?a", "...?a?a,,,?a?a*?a?a?"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaabb,,,ab*abbb?", match_default|format_all, "(?1A:(?2B))abc", "...AabcBabc,,,AabcBabc*AabcBabc?"); + TEST_REGEX_REPLACE("a+(b+)", perl, "...aaabb,,,", match_default|format_all|format_no_copy, "(?2abc:def)", "def"); + TEST_REGEX_REPLACE("a+(b+)", perl, "...aaabb,,,", match_default|format_all|format_no_copy, "(?1abc:def)", "abc"); + TEST_REGEX_REPLACE("a+(b+)", perl, "...aaabb,,,", match_default|format_perl|format_no_copy, "(?1abc:def)", "(?1abc:def)"); + TEST_REGEX_REPLACE("a+(b+)", perl, "...", match_default|format_perl, "(?1abc:def)", "..."); + TEST_REGEX_REPLACE("a+(b+)", perl, "...", match_default|format_perl|format_no_copy, "(?1abc:def)", ""); + // probe bug reports and other special cases: + TEST_REGEX_REPLACE("([^\\d]+).*", normal|icase, "tesd 999 test", match_default|format_all, "($1)replace", "tesd replace"); + TEST_REGEX_REPLACE("(a)(b)", perl, "ab", match_default|format_all, "$1:$2", "a:b"); + TEST_REGEX_REPLACE("(a(c)?)|(b)", perl, "acab", match_default|format_all, "(?1(?2(C:):A):B:)", "C:AB:"); + TEST_REGEX_REPLACE("x", icase, "xx", match_default|format_all, "a", "aa"); + TEST_REGEX_REPLACE("x", basic|icase, "xx", match_default|format_all, "a", "aa"); + TEST_REGEX_REPLACE("x", boost::regex::extended|icase, "xx", match_default|format_all, "a", "aa"); + TEST_REGEX_REPLACE("x", emacs|icase, "xx", match_default|format_all, "a", "aa"); + TEST_REGEX_REPLACE("x", literal|icase, "xx", match_default|format_all, "a", "aa"); + // literals: + TEST_REGEX_REPLACE("(a(c)?)|(b)", perl, "acab", match_default|format_literal, "\\&$", "\\&$\\&$\\&$"); + // Bracketed sub expressions: + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default, "$", "...$,,,"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default, "${", "...${,,,"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default, "${2", "...${2,,,"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default, "${23", "...${23,,,"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default, "${d}", "...${d},,,"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default, "/${1}/", ".../aaa/,,,"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default, "/${10}/", "...//,,,"); + TEST_REGEX_REPLACE("((((((((((a+))))))))))", perl, "...aaa,,,", match_default, "/${10}/", ".../aaa/,,,"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default, "/${1}0/", ".../aaa0/,,,"); + + // New Perl style operators: + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$MATCH", "aaa"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${MATCH}", "aaa"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${^MATCH}", "aaa"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$MATC", "$MATC"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${MATCH", "${MATCH"); + + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$PREMATCH", "..."); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${PREMATCH}", "..."); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${^PREMATCH}", "..."); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$PREMATC", "$PREMATC"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${PREMATCH", "${PREMATCH"); + + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$POSTMATCH", ",,,"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${POSTMATCH}", ",,,"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${^POSTMATCH}", ",,,"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$POSTMATC", "$POSTMATC"); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "${POSTMATCH", "${POSTMATCH"); + + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$LAST_PAREN_MATCH", ""); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$LAST_PAREN_MATC", "$LAST_PAREN_MATC"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default|format_no_copy, "$LAST_PAREN_MATCH", "aaa"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, "...aaabb,,,", match_default|format_no_copy, "$LAST_PAREN_MATCH", "bb"); + + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$+", ""); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$+foo", "foo"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default|format_no_copy, "$+", "aaa"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, "...aaabb,,,", match_default|format_no_copy, "$+foo", "bbfoo"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, "...aaabb,,,", match_default|format_no_copy, "$+{", "bb{"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, "...aaabb,,,", match_default|format_no_copy, "$+{foo", "bb{foo"); + + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$LAST_SUBMATCH_RESULT", ""); + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$LAST_SUBMATCH_RESUL", "$LAST_SUBMATCH_RESUL"); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default|format_no_copy, "$LAST_SUBMATCH_RESULT", "aaa"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, "...aaabb,,,", match_default|format_no_copy, "$LAST_SUBMATCH_RESULT", "bb"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaa,,,", match_default|format_no_copy, "$LAST_SUBMATCH_RESULT", "aaa"); + + TEST_REGEX_REPLACE("a+", perl, "...aaa,,,", match_default|format_no_copy, "$^N", ""); + TEST_REGEX_REPLACE("(a+)", perl, "...aaa,,,", match_default|format_no_copy, "$^N", "aaa"); + TEST_REGEX_REPLACE("(a+)(b+)", perl, "...aaabb,,,", match_default|format_no_copy, "$^N", "bb"); + TEST_REGEX_REPLACE("(a+)|(b+)", perl, "...aaa,,,", match_default|format_no_copy, "$^N", "aaa"); + + TEST_REGEX_REPLACE("(?<one>a+)(?<two>b+)", perl, " ...aabb,,", match_default|format_no_copy, "$&", "aabb"); + TEST_REGEX_REPLACE("(?<one>a+)(?<two>b+)", perl, " ...aabb,,", match_default|format_no_copy, "$1", "aa"); + TEST_REGEX_REPLACE("(?<one>a+)(?<two>b+)", perl, " ...aabb,,", match_default|format_no_copy, "$2", "bb"); + TEST_REGEX_REPLACE("(?<one>a+)(?<two>b+)", perl, " ...aabb,,", match_default|format_no_copy, "d$+{one}c", "daac"); + TEST_REGEX_REPLACE("(?<one>a+)(?<two>b+)", perl, " ...aabb,,", match_default|format_no_copy, "c$+{two}d", "cbbd"); + + TEST_REGEX_REPLACE("(?<one>a)(?<one>b)(c)", perl, " ...abc,,", match_default, "$1.$2.$3.$+{one}", " ...a.b.c.a,,"); + TEST_REGEX_REPLACE("(?:(?<one>a)|(?<one>b))", perl, " ...a,,", match_default, "$1.$2.$+{one}", " ...a..a,,"); + TEST_REGEX_REPLACE("(?:(?<one>a)|(?<one>b))", perl, " ...b,,", match_default, "$1.$2.$+{one}", " ....b.b,,"); + TEST_REGEX_REPLACE("(?:(?<one>a)(?<one>b))", perl, " ...ab,,", match_default, "$1.$2.$+{one}", " ...a.b.a,,"); + +} + diff --git a/libs/regex/test/regress/test_sets.cpp b/libs/regex/test/regress/test_sets.cpp new file mode 100644 index 0000000000..3cd7a520ec --- /dev/null +++ b/libs/regex/test/regress/test_sets.cpp @@ -0,0 +1,406 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_sets() +{ + using namespace boost::regex_constants; + // now test the set operator [] + TEST_REGEX_SEARCH("[abc]", boost::regex::extended, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[abc]", boost::regex::extended, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[abc]", boost::regex::extended, "c", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[abc]", boost::regex::extended, "d", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[^bcd]", boost::regex::extended, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[^bcd]", boost::regex::extended, "b", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[^bcd]", boost::regex::extended, "d", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[^bcd]", boost::regex::extended, "e", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a[b]c", boost::regex::extended, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[ab]c", boost::regex::extended, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[a^b]*c", boost::regex::extended, "aba^c", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a[^ab]c", boost::regex::extended, "adc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[]b]c", boost::regex::extended, "a]c", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[[b]c", boost::regex::extended, "a[c", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[-b]c", boost::regex::extended, "a-c", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[^]b]c", boost::regex::extended, "adc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[^-b]c", boost::regex::extended, "adc", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[b-]c", boost::regex::extended, "a-c", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[a-z-]c", boost::regex::extended, "a-c", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[a-z-]+c", boost::regex::extended, "aaz-c", match_default, make_array(0, 5, -2, -2)); + TEST_INVALID_REGEX("a[b", boost::regex::extended); + TEST_INVALID_REGEX("a[", boost::regex::extended); + TEST_INVALID_REGEX("a[]", boost::regex::extended); + + // now some ranges: + TEST_REGEX_SEARCH("[b-e]", boost::regex::extended, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[b-e]", boost::regex::extended, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[b-e]", boost::regex::extended, "e", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[b-e]", boost::regex::extended, "f", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[^b-e]", boost::regex::extended, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[^b-e]", boost::regex::extended, "b", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[^b-e]", boost::regex::extended, "e", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[^b-e]", boost::regex::extended, "f", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a[1-3]c", boost::regex::extended, "a2c", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[-3]c", boost::regex::extended, "a-c", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[-3]c", boost::regex::extended, "a3c", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a[^-3]c", boost::regex::extended, "a-c", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a[^-3]c", boost::regex::extended, "a3c", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a[^-3]c", boost::regex::extended, "axc", match_default, make_array(0, 3, -2, -2)); + TEST_INVALID_REGEX("a[3-1]c", boost::regex::extended & ~::boost::regex_constants::collate); + TEST_INVALID_REGEX("a[1-3-5]c", boost::regex::extended); + TEST_INVALID_REGEX("a[1-", boost::regex::extended); + TEST_INVALID_REGEX("a[\\9]", perl); + + // and some classes + TEST_REGEX_SEARCH("a[[:alpha:]]c", boost::regex::extended, "abc", match_default, make_array(0, 3, -2, -2)); + TEST_INVALID_REGEX("a[[:unknown:]]c", boost::regex::extended); + TEST_INVALID_REGEX("a[[", boost::regex::extended); + TEST_INVALID_REGEX("a[[:", boost::regex::extended); + TEST_INVALID_REGEX("a[[:a", boost::regex::extended); + TEST_INVALID_REGEX("a[[:alpha", boost::regex::extended); + TEST_INVALID_REGEX("a[[:alpha:", boost::regex::extended); + TEST_INVALID_REGEX("a[[:alpha:]", boost::regex::extended); + TEST_INVALID_REGEX("a[[:alpha:!", boost::regex::extended); + TEST_INVALID_REGEX("a[[:alpha,:]", boost::regex::extended); + TEST_INVALID_REGEX("a[[:]:]]b", boost::regex::extended); + TEST_INVALID_REGEX("a[[:-:]]b", boost::regex::extended); + TEST_INVALID_REGEX("a[[:alph:]]", boost::regex::extended); + TEST_INVALID_REGEX("a[[:alphabet:]]", boost::regex::extended); + TEST_REGEX_SEARCH("[[:alnum:]]+", boost::regex::extended, "-%@a0X_-", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("[[:alpha:]]+", boost::regex::extended, " -%@aX_0-", match_default, make_array(4, 6, -2, -2)); + TEST_REGEX_SEARCH("[[:blank:]]+", boost::regex::extended, "a \tb", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("[[:cntrl:]]+", boost::regex::extended, " a\n\tb", match_default, make_array(2, 4, -2, -2)); + TEST_REGEX_SEARCH("[[:digit:]]+", boost::regex::extended, "a019b", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("[[:graph:]]+", boost::regex::extended, " a%b ", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("[[:lower:]]+", boost::regex::extended, "AabC", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("[[:print:]]+", boost::regex::extended, "AabC", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("[[:punct:]]+", boost::regex::extended, " %-&\t", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("[[:space:]]+", boost::regex::extended, "a \n\t\rb", match_default, make_array(1, 5, -2, -2)); + TEST_REGEX_SEARCH("[[:upper:]]+", boost::regex::extended, "aBCd", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("[[:xdigit:]]+", boost::regex::extended, "p0f3Cx", match_default, make_array(1, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\d]+", perl, "a019b", match_default, make_array(1, 4, -2, -2)); + + // + // escapes are supported in character classes if we have either + // perl or awk regular expressions: + // + TEST_REGEX_SEARCH("[\\n]", perl, "\n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[\\b]", perl, "\b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[\\n]", basic, "\n", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[\\n]", basic, "\\", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:class:]", basic|no_char_classes, ":", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:class:]", basic|no_char_classes, "[", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:class:]", basic|no_char_classes, "c", match_default, make_array(0, 1, -2, -2)); + // + // test single character escapes: + // + TEST_REGEX_SEARCH("\\w", perl, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\w", perl, "Z", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\w", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\w", perl, "z", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\w", perl, "_", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\w", perl, "}", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\w", perl, "`", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\w", perl, "[", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\w", perl, "@", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "z", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "A", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "Z", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "_", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "}", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "`", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "[", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\W", perl, "@", match_default, make_array(0, 1, -2, -2)); + + TEST_REGEX_SEARCH("[[:lower:]]", perl|icase, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:upper:]]", perl|icase, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:alpha:]]", perl|icase, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:alnum:]]", perl|icase, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:lower:]]", perl|icase, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:upper:]]", perl|icase, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:alpha:]]", perl|icase, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:alnum:]]", perl|icase, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:lower:][:upper:]]", perl, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:lower:][:upper:]]", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:lower:][:alpha:]]", perl, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[:lower:][:alpha:]]", perl, "a", match_default, make_array(0, 1, -2, -2)); +} + +void test_sets2b(); +void test_sets2c(); + +void test_sets2() +{ + using namespace boost::regex_constants; + // collating elements + TEST_REGEX_SEARCH("[[.zero.]]", perl, "0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.one.]]", perl, "1", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.two.]]", perl, "2", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.three.]]", perl, "3", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.a.]]", perl, "bac", match_default, make_array(1, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.\xf0.]]", perl, "b\xf0x", match_default, make_array(1, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.right-curly-bracket.]]", perl, "}", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.NUL.]]", perl, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.NUL.][.ae.]]", perl, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.NUL.]-a]", boost::regex::extended, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.NUL.]-a]", perl, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.NUL.]-a]", boost::regex::extended, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.NUL.]-a]", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.NUL.]-[.NUL.]a]", boost::regex::extended, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.NUL.]-[.NUL.]a]", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_INVALID_REGEX("[[..]]", perl); + TEST_INVALID_REGEX("[[.not-a-collating-element.]]", perl); + TEST_INVALID_REGEX("[[.", perl); + TEST_INVALID_REGEX("[[.N", perl); + TEST_INVALID_REGEX("[[.NUL", perl); + TEST_INVALID_REGEX("[[.NUL.", perl); + TEST_INVALID_REGEX("[[.NUL.]", perl); + TEST_INVALID_REGEX("[[:<:]z]", perl); + TEST_INVALID_REGEX("[a[:>:]]", perl); + TEST_REGEX_SEARCH("[[.A.]]", boost::regex::extended|icase, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.A.]]", boost::regex::extended|icase, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.A.]-b]+", boost::regex::extended|icase, "AaBb", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("[A-[.b.]]+", boost::regex::extended|icase, "AaBb", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("[[.a.]-B]+", boost::regex::extended|icase, "AaBb", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("[a-[.B.]]+", boost::regex::extended|icase, "AaBb", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("[\x61]", boost::regex::extended, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[\x61-c]+", boost::regex::extended, "abcd", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("[a-\x63]+", boost::regex::extended, "abcd", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("[[.a.]-c]+", boost::regex::extended, "abcd", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("[a-[.c.]]+", boost::regex::extended, "abcd", match_default, make_array(0, 3, -2, -2)); + TEST_INVALID_REGEX("[[:alpha:]-a]", boost::regex::extended); + TEST_INVALID_REGEX("[a-[:alpha:]]", boost::regex::extended); + TEST_REGEX_SEARCH("[[.ae.]]", basic, "ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]]", basic, "aE", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[[.AE.]]", basic, "AE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.Ae.]]", basic, "Ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]-b]", basic, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[[.ae.]-b]", basic, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]-b]", basic, "ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[a-[.ae.]]", basic, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[a-[.ae.]]", basic, "b", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[a-[.ae.]]", basic, "ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]]", basic|icase, "AE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]]", basic|icase, "Ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.AE.]]", basic|icase, "Ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.Ae.]]", basic|icase, "aE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.AE.]-B]", basic|icase, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[[.Ae.]-b]", basic|icase, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.Ae.]-b]", basic|icase, "B", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]-b]", basic|icase, "AE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]]", perl, "ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]]", perl, "aE", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[[.AE.]]", perl, "AE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.Ae.]]", perl, "Ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]-b]", perl, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[[.ae.]-b]", perl, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]-b]", perl, "ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[a-[.ae.]]", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[a-[.ae.]]", perl, "b", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[a-[.ae.]]", perl, "ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]]", perl|icase, "AE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]]", perl|icase, "Ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.AE.]]", perl|icase, "Ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.Ae.]]", perl|icase, "aE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.AE.]-B]", perl|icase, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("[[.Ae.]-b]", perl|icase, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.Ae.]-b]", perl|icase, "B", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.]-b]", perl|icase, "AE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.][:lower:]]", perl|icase, "AE", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.][:lower:]]", perl|icase, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[.ae.][=a=]]+", perl, "zzaA", match_default, make_array(2, 4, -2, -2)); + TEST_INVALID_REGEX("[d-[.ae.]]", perl); + // + // try some equivalence classes: + // + TEST_REGEX_SEARCH("[[=a=]]", basic, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[=a=]]", basic, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[=ae=]]", basic, "ae", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("[[=right-curly-bracket=]]", basic, "}", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[=NUL=]]", basic, "\x0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[[=NUL=]]", perl, "\x0", match_default, make_array(0, 1, -2, -2)); + TEST_INVALID_REGEX("[[=", perl); + TEST_INVALID_REGEX("[[=a", perl); + TEST_INVALID_REGEX("[[=ae", perl); + TEST_INVALID_REGEX("[[=ae=", perl); + TEST_INVALID_REGEX("[[=ae=]", perl); + // + // now some perl style single character classes: + // + TEST_REGEX_SEARCH("\\l+", perl, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\l]+", perl, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_INVALID_REGEX("[\\l-a]", perl); + TEST_REGEX_SEARCH("[\\L]+", perl, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[[:^lower:]]+", perl, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\L+", perl, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\u+", perl, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\u]+", perl, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\U]+", perl, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[[:^upper:]]+", perl, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\U+", perl, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\d+", perl, "AB012AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\d]+", perl, "AB012AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\D]+", perl, "01abc01", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[[:^digit:]]+", perl, "01abc01", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\D+", perl, "01abc01", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\s+", perl, "AB AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\s]+", perl, "AB AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\S]+", perl, " abc ", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[[:^space:]]+", perl, " abc ", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\S+", perl, " abc ", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\s+", perl, "AB AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("[\\w]+", perl, "AB_ AB", match_default, make_array(0, 3, -2, 6, 8, -2, -2)); + TEST_REGEX_SEARCH("[\\W]+", perl, "AB_ AB", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("[[:^word:]]+", perl, "AB_ AB", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("\\W+", perl, "AB_ AB", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("\\h+", perl, "\v\f\r\n \t\n", match_default, make_array(4, 6, -2, -2)); + TEST_REGEX_SEARCH("\\V+", perl, "\v\f\r\n \t\n", match_default, make_array(4, 6, -2, -2)); + TEST_REGEX_SEARCH("\\H+", perl, " \t\v\f\r\n ", match_default, make_array(2, 6, -2, -2)); + TEST_REGEX_SEARCH("\\v+", perl, " \t\v\f\r\n ", match_default, make_array(2, 6, -2, -2)); + test_sets2c(); +} + +void test_sets2c() +{ + using namespace boost::regex_constants; + // and some Perl style properties: + TEST_REGEX_SEARCH("\\pl+", perl, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\Pl+", perl, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\pu+", perl, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\Pu+", perl, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\pd+", perl, "AB012AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\PD+", perl, "01abc01", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\ps+", perl, "AB AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\PS+", perl, " abc ", match_default, make_array(2, 5, -2, -2)); + + TEST_REGEX_SEARCH("\\p{alnum}+", perl, "-%@a0X_-", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("\\p{alpha}+", perl, " -%@aX_0-", match_default, make_array(4, 6, -2, -2)); + TEST_REGEX_SEARCH("\\p{blank}+", perl, "a \tb", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{cntrl}+", perl, " a\n\tb", match_default, make_array(2, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{digit}+", perl, "a019b", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{graph}+", perl, " a%b ", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{lower}+", perl, "AabC", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\p{print}+", perl, "AabC", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{punct}+", perl, " %-&\t", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{space}+", perl, "a \n\t\rb", match_default, make_array(1, 5, -2, -2)); + TEST_REGEX_SEARCH("\\p{upper}+", perl, "aBCd", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\p{xdigit}+", perl, "p0f3Cx", match_default, make_array(1, 5, -2, -2)); + TEST_REGEX_SEARCH("\\P{alnum}+", perl, "-%@a", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\P{alpha}+", perl, " -%@a", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("\\P{blank}+", perl, "a ", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{cntrl}+", perl, " a\n", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\P{digit}+", perl, "a0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{graph}+", perl, " a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{lower}+", perl, "Aa", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{print}+", perl, "Absc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\P{punct}+", perl, " %", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{space}+", perl, "a ", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{upper}+", perl, "aB", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{xdigit}+", perl, "pf", match_default, make_array(0, 1, -2, -2)); + + TEST_INVALID_REGEX("\\p{invalid class}", perl); + TEST_INVALID_REGEX("\\p{upper", perl); + TEST_INVALID_REGEX("\\p{", perl); + TEST_INVALID_REGEX("\\p", perl); + TEST_INVALID_REGEX("\\P{invalid class}", perl); + TEST_INVALID_REGEX("\\P{upper", perl); + TEST_INVALID_REGEX("\\P{", perl); + TEST_INVALID_REGEX("\\P", perl); + + // try named characters: + TEST_REGEX_SEARCH("\\N{zero}", perl, "0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{one}", perl, "1", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{two}", perl, "2", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{three}", perl, "3", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{a}", perl, "bac", match_default, make_array(1, 2, -2, -2)); + TEST_REGEX_SEARCH("\\N{\xf0}", perl, "b\xf0x", match_default, make_array(1, 2, -2, -2)); + TEST_REGEX_SEARCH("\\N{right-curly-bracket}", perl, "}", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{NUL}", perl, "\0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[\\N{zero}-\\N{nine}]+", perl, " 0123456789 ", match_default, make_array(1, 11, -2, -2)); + + TEST_INVALID_REGEX("\\N", perl); + TEST_INVALID_REGEX("\\N{", perl); + TEST_INVALID_REGEX("\\N{}", perl); + TEST_INVALID_REGEX("\\N{invalid-name}", perl); + TEST_INVALID_REGEX("\\N{zero", perl); + test_sets2b(); +} + +void test_sets2b() +{ + using namespace boost::regex_constants; + + // and repeat with POSIX-boost::regex::extended syntax: + TEST_REGEX_SEARCH("\\pl+", boost::regex::extended, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\Pl+", boost::regex::extended, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\pu+", boost::regex::extended, "abABCab", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\Pu+", boost::regex::extended, "ABabcAB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\pd+", boost::regex::extended, "AB012AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\PD+", boost::regex::extended, "01abc01", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\ps+", boost::regex::extended, "AB AB", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("\\PS+", boost::regex::extended, " abc ", match_default, make_array(2, 5, -2, -2)); + + TEST_REGEX_SEARCH("\\p{alnum}+", boost::regex::extended, "-%@a0X_-", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("\\p{alpha}+", boost::regex::extended, " -%@aX_0-", match_default, make_array(4, 6, -2, -2)); + TEST_REGEX_SEARCH("\\p{blank}+", boost::regex::extended, "a \tb", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{cntrl}+", boost::regex::extended, " a\n\tb", match_default, make_array(2, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{digit}+", boost::regex::extended, "a019b", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{graph}+", boost::regex::extended, " a%b ", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{lower}+", boost::regex::extended, "AabC", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\p{print}+", boost::regex::extended, "AabC", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{punct}+", boost::regex::extended, " %-&\t", match_default, make_array(1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\p{space}+", boost::regex::extended, "a \n\t\rb", match_default, make_array(1, 5, -2, -2)); + TEST_REGEX_SEARCH("\\p{upper}+", boost::regex::extended, "aBCd", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH("\\p{xdigit}+", boost::regex::extended, "p0f3Cx", match_default, make_array(1, 5, -2, -2)); + TEST_REGEX_SEARCH("\\P{alnum}+", boost::regex::extended, "-%@a", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("\\P{alpha}+", boost::regex::extended, " -%@a", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("\\P{blank}+", boost::regex::extended, "a ", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{cntrl}+", boost::regex::extended, " a\n", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\P{digit}+", boost::regex::extended, "a0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{graph}+", boost::regex::extended, " a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{lower}+", boost::regex::extended, "Aa", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{print}+", boost::regex::extended, "Absc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("\\P{punct}+", boost::regex::extended, " %", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{space}+", boost::regex::extended, "a ", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{upper}+", boost::regex::extended, "aB", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\P{xdigit}+", boost::regex::extended, "pf", match_default, make_array(0, 1, -2, -2)); + + TEST_INVALID_REGEX("\\p{invalid class}", boost::regex::extended); + TEST_INVALID_REGEX("\\p{upper", boost::regex::extended); + TEST_INVALID_REGEX("\\p{", boost::regex::extended); + TEST_INVALID_REGEX("\\p", boost::regex::extended); + TEST_INVALID_REGEX("\\P{invalid class}", boost::regex::extended); + TEST_INVALID_REGEX("\\P{upper", boost::regex::extended); + TEST_INVALID_REGEX("\\P{", boost::regex::extended); + TEST_INVALID_REGEX("\\P", boost::regex::extended); + + // try named characters: + TEST_REGEX_SEARCH("\\N{zero}", boost::regex::extended, "0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{one}", boost::regex::extended, "1", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{two}", boost::regex::extended, "2", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{three}", boost::regex::extended, "3", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{a}", boost::regex::extended, "bac", match_default, make_array(1, 2, -2, -2)); + TEST_REGEX_SEARCH("\\N{\xf0}", boost::regex::extended, "b\xf0x", match_default, make_array(1, 2, -2, -2)); + TEST_REGEX_SEARCH("\\N{right-curly-bracket}", boost::regex::extended, "}", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\N{NUL}", boost::regex::extended, "\0", match_default, make_array(0, 1, -2, -2)); + + TEST_INVALID_REGEX("\\N", boost::regex::extended); + TEST_INVALID_REGEX("\\N{", boost::regex::extended); + TEST_INVALID_REGEX("\\N{}", boost::regex::extended); + TEST_INVALID_REGEX("\\N{invalid-name}", boost::regex::extended); + TEST_INVALID_REGEX("\\N{zero", boost::regex::extended); +} + diff --git a/libs/regex/test/regress/test_simple_repeats.cpp b/libs/regex/test/regress/test_simple_repeats.cpp new file mode 100644 index 0000000000..044ca2fd5c --- /dev/null +++ b/libs/regex/test/regress/test_simple_repeats.cpp @@ -0,0 +1,487 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_simple_repeats2(); + +void test_simple_repeats() +{ + using namespace boost::regex_constants; + // simple repeats: + TEST_REGEX_SEARCH("a*", perl, "b", match_default, make_array(0, 0, -2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("ab*", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab*", basic, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab*", perl, "sssabbbbbbsss", match_default, make_array(3, 10, -2, -2)); + TEST_REGEX_SEARCH("ab*c*", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("ab*c*", perl, "abbb", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab*c*", perl, "accc", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab*c*", perl, "abbcc", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("*a", basic, "*a", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("^*a", basic, "*a", match_default, make_array(0, 2, -2, -2)); + TEST_INVALID_REGEX("*a", perl); + TEST_INVALID_REGEX("\\<*", perl); + TEST_INVALID_REGEX("\\>*", perl); + TEST_REGEX_SEARCH("\n*", perl, "\n\n", match_default, make_array(0, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("\\**", perl, "**", match_default, make_array(0, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("\\*", perl, "*", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("(ab)*", perl, "abab", match_default, make_array(0, 4, 2, 4, -2, 4, 4, -2, -2)); + + TEST_INVALID_REGEX("(*)", perl); + TEST_INVALID_REGEX("(*)", boost::regex::extended); + TEST_INVALID_REGEX("\\(*\\)", basic); + TEST_INVALID_REGEX("^*", perl); + TEST_INVALID_REGEX("^*", boost::regex::extended); + TEST_INVALID_REGEX("$*", perl); + TEST_INVALID_REGEX("$*", boost::regex::extended); + TEST_INVALID_REGEX("$*", basic); + TEST_INVALID_REGEX("\\b*", perl); + TEST_INVALID_REGEX("\\B*", perl); + TEST_INVALID_REGEX("\\A*", perl); + TEST_INVALID_REGEX("\\z*", perl); + TEST_INVALID_REGEX("\\Z*", perl); + TEST_INVALID_REGEX("\\A*", perl); + TEST_INVALID_REGEX("a|*", perl); + TEST_INVALID_REGEX("a|*", boost::regex::extended); + TEST_INVALID_REGEX("(+)", perl); + TEST_INVALID_REGEX("(+)", boost::regex::extended); + TEST_INVALID_REGEX("^+", perl); + TEST_INVALID_REGEX("^+", boost::regex::extended); + TEST_INVALID_REGEX("$+", perl); + TEST_INVALID_REGEX("$+", boost::regex::extended); + TEST_INVALID_REGEX("\\b+", perl); + TEST_INVALID_REGEX("\\B+", perl); + TEST_INVALID_REGEX("\\A+", perl); + TEST_INVALID_REGEX("\\z+", perl); + TEST_INVALID_REGEX("\\Z+", perl); + TEST_INVALID_REGEX("\\A+", perl); + TEST_INVALID_REGEX("a|+", perl); + TEST_INVALID_REGEX("a|+", boost::regex::extended); + TEST_INVALID_REGEX("(?)", perl); + TEST_INVALID_REGEX("(?)", boost::regex::extended); + TEST_INVALID_REGEX("^?", perl); + TEST_INVALID_REGEX("^?", boost::regex::extended); + TEST_INVALID_REGEX("$?", perl); + TEST_INVALID_REGEX("$?", boost::regex::extended); + TEST_INVALID_REGEX("\\b?", perl); + TEST_INVALID_REGEX("\\B?", perl); + TEST_INVALID_REGEX("\\A?", perl); + TEST_INVALID_REGEX("\\z?", perl); + TEST_INVALID_REGEX("\\Z?", perl); + TEST_INVALID_REGEX("\\A?", perl); + TEST_INVALID_REGEX("a|?", perl); + TEST_INVALID_REGEX("a|?", boost::regex::extended); + TEST_INVALID_REGEX("({1,2})", perl); + TEST_INVALID_REGEX("({1,2})", boost::regex::extended); + TEST_INVALID_REGEX("^{1,2}", perl); + TEST_INVALID_REGEX("^{1,2}", boost::regex::extended); + TEST_INVALID_REGEX("${1,2}", perl); + TEST_INVALID_REGEX("${1,2}", boost::regex::extended); + TEST_INVALID_REGEX("\\b{1,2}", perl); + TEST_INVALID_REGEX("\\B{1,2}", perl); + TEST_INVALID_REGEX("\\A{1,2}", perl); + TEST_INVALID_REGEX("\\z{1,2}", perl); + TEST_INVALID_REGEX("\\Z{1,2}", perl); + TEST_INVALID_REGEX("\\A{1,2}", perl); + TEST_INVALID_REGEX("a|{1,2}", perl); + TEST_INVALID_REGEX("a|{1,2}", boost::regex::extended); + + // now try operator + : + TEST_REGEX_SEARCH("ab+", perl, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab+", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab+", perl, "sssabbbbbbsss", match_default, make_array(3, 10, -2, -2)); + TEST_REGEX_SEARCH("ab+c+", perl, "abbb", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab+c+", perl, "accc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab+c+", perl, "abbcc", match_default, make_array(0, 5, -2, -2)); + TEST_INVALID_REGEX("+a", perl); + TEST_INVALID_REGEX("\\<+", perl); + TEST_INVALID_REGEX("\\>+", perl); + TEST_REGEX_SEARCH("\n+", perl, "\n\n", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\+", perl, "+", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\+", perl, "++", match_default, make_array(0, 1, -2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("\\++", perl, "++", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("+", basic|bk_plus_qm, "+", match_default, make_array(0, 1, -2, -2)); + TEST_INVALID_REGEX("\\+", basic|bk_plus_qm); + TEST_REGEX_SEARCH("a\\+", basic|bk_plus_qm, "aa", match_default, make_array(0, 2, -2, -2)); + + // now try operator ? + TEST_REGEX_SEARCH("a?", perl, "b", match_default, make_array(0, 0, -2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("ab?", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("ab?", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab?", perl, "sssabbbbbbsss", match_default, make_array(3, 5, -2, -2)); + TEST_REGEX_SEARCH("ab?c?", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("ab?c?", perl, "abbb", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab?c?", perl, "accc", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab?c?", perl, "abcc", match_default, make_array(0, 3, -2, -2)); + TEST_INVALID_REGEX("?a", perl); + TEST_INVALID_REGEX("\\<?", perl); + TEST_INVALID_REGEX("\\>?", perl); + TEST_REGEX_SEARCH("\n?", perl, "\n\n", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("\\?", perl, "?", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\?", perl, "?", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\??", perl, "??", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("?", basic|bk_plus_qm, "?", match_default, make_array(0, 1, -2, -2)); + TEST_INVALID_REGEX("\\?", basic|bk_plus_qm); + TEST_REGEX_SEARCH("a\\?", basic|bk_plus_qm, "aa", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\?", basic|bk_plus_qm, "b", match_default, make_array(0, 0, -2, 1, 1, -2, -2)); + + TEST_REGEX_SEARCH("a?", basic, "a?", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a+", basic, "a+", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\?", basic, "a?", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\+", basic, "a+", match_default, make_array(0, 2, -2, -2)); + + // now try operator {} + TEST_REGEX_SEARCH("a{2}", perl, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a{2}", perl, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{2}", perl, "aaa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{2,}", perl, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a{2,}", perl, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{2,}", perl, "aaaaa", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}", perl, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a{2,4}", perl, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}", perl, "aaa", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}", perl, "aaaa", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}", perl, "aaaaa", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a{ 2 , 4 }", perl, "aaaaa", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a{ 2 , }", perl, "aaaaa", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a{ 2 }", perl, "aaa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\{\\}", perl, "a{}", match_default, make_array(0, 3, -2, -2)); + + TEST_REGEX_SEARCH("a{2,4}?", perl, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a{2,4}?", perl, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}?", perl, "aaa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}?", perl, "aaaa", match_default, make_array(0, 2, -2, 2, 4, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}?", perl, "aaaaa", match_default, make_array(0, 2, -2, 2, 4, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}?$", perl, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}?$", perl, "aaa", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}?$", perl, "aaaa", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a{2,4}?$", perl, "aaaaa", match_default, make_array(1, 5, -2, -2)); + TEST_REGEX_SEARCH("^a{0,1}?$", perl, "aaaaa", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(?:a){0,1}?$", perl, "aaaaa", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^a(?:bc)?", perl, "abcbc", match_any|match_all, make_array(-2, -2)); + test_simple_repeats2(); +} + +void test_simple_repeats2() +{ + using namespace boost::regex_constants; + + TEST_INVALID_REGEX("a{}", perl); + TEST_INVALID_REGEX("a{", perl); + TEST_INVALID_REGEX("a{1", perl); + TEST_INVALID_REGEX("a{1,", perl); + TEST_INVALID_REGEX("a{1,2", perl); + TEST_INVALID_REGEX("a{ 1 , 2 ", perl); + TEST_INVALID_REGEX("a{ }", perl); + TEST_INVALID_REGEX("a}", perl); + TEST_INVALID_REGEX("{1}", perl); + TEST_INVALID_REGEX("a{b}", perl); + TEST_INVALID_REGEX("a{1b}", perl); + TEST_INVALID_REGEX("a{1,b}", perl); + TEST_INVALID_REGEX("a{1,2v}", perl); + TEST_INVALID_REGEX("a{2,1}", perl); + + // now try operator \\{\\} for POSIX basic regexes + TEST_REGEX_SEARCH("a\\{2\\}", basic, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\{2\\}", basic|no_intervals, "a{2}", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a\\{2\\}", basic, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\{2\\}", basic, "aaa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\{2,\\}", basic, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\{2,\\}", basic, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\{2,\\}", basic, "aaaaa", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "a", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "aa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "aaa", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "aaaa", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "aaaaa", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a\\{ 2 , 4 \\}", basic, "aaaaa", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a\\{ 2 , \\}", basic, "aaaaa", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a\\{ 2 \\}", basic, "aaa", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{}", basic, "a{}", match_default, make_array(0, 3, -2, -2)); + TEST_INVALID_REGEX("a\\{\\}", basic); + TEST_INVALID_REGEX("a\\{", basic); + TEST_INVALID_REGEX("a\\{1", basic); + TEST_INVALID_REGEX("a\\{1,", basic); + TEST_INVALID_REGEX("a\\{1,\\", basic); + TEST_INVALID_REGEX("a\\{ \\}", basic); + TEST_INVALID_REGEX("a\\}", basic); + TEST_INVALID_REGEX("\\{1\\}", basic); + TEST_INVALID_REGEX("a\\{b\\}", basic); + TEST_INVALID_REGEX("a\\{1b\\}", basic); + TEST_INVALID_REGEX("a\\{1,b\\}", basic); + TEST_INVALID_REGEX("a\\{1,2v\\}", basic); + TEST_INVALID_REGEX("a\\{3,1\\}", basic); + +} + +void test_fast_repeats() +{ + using namespace boost::regex_constants; + // extended repeat checking to exercise new algorithms: + TEST_REGEX_SEARCH("ab.*xy", perl, "abxy_", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.*xy", perl, "ab_xy_", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab.*xy", perl, "abxy", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.*xy", perl, "ab_xy", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab.*", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab.*", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH(".*xy", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH(".*?xy", perl, "abc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a+?xy", perl, "abc", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab__xy_", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab____xy_", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab_____xy_", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab__xy", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab_____xy", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}", perl, "ab_______", match_default, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab______xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab_xy", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab.*?xy", perl, "abxy_", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.*?xy", perl, "ab_xy_", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab.*?xy", perl, "abxy", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.*?xy", perl, "ab_xy", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab.*?", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab.*?", perl, "ab__", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab__xy_", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab____xy_", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab_____xy_", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab__xy", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab_____xy", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?", perl, "ab_______", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab______xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab_xy", match_default, make_array(-2, -2)); + + // again but with slower algorithm variant: + TEST_REGEX_SEARCH("ab.*xy", perl, "abxy_", match_not_dot_newline|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.*xy", perl, "ab_xy_", match_not_dot_newline|match_not_dot_null, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab.*xy", perl, "abxy", match_not_dot_newline|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.*xy", perl, "ab_xy", match_not_dot_newline|match_not_dot_null, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab.*", perl, "ab", match_not_dot_newline|match_not_dot_null, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab.*", perl, "ab__", match_not_dot_newline|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH(".*xy", perl, "abc", match_not_dot_newline|match_not_dot_null, make_array(-2, -2)); + TEST_REGEX_SEARCH(".*?xy", perl, "abc", match_not_dot_newline|match_not_dot_null, make_array(-2, -2)); + TEST_REGEX_SEARCH(".*xy", perl, "ab\nbc", match_not_dot_newline|match_not_dot_null, make_array(-2, -2)); + TEST_REGEX_SEARCH(".*?xy", perl, "ax\nbc", match_not_dot_newline|match_not_dot_null, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab__xy_", match_not_dot_newline|match_not_dot_null, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab____xy_", match_not_dot_newline|match_not_dot_null, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab_____xy_", match_not_dot_newline|match_not_dot_null, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab__xy", match_not_dot_newline|match_not_dot_null, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab_____xy", match_not_dot_newline|match_not_dot_null, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}", perl, "ab__", match_not_dot_newline|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}", perl, "ab_______", match_not_dot_newline|match_not_dot_null, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab______xy", match_not_dot_newline|match_not_dot_null, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab_xy", match_not_dot_newline|match_not_dot_null, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab.*?xy", perl, "abxy_", match_not_dot_newline|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.*?xy", perl, "ab_xy_", match_not_dot_newline|match_not_dot_null, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab.*?xy", perl, "abxy", match_not_dot_newline|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.*?xy", perl, "ab_xy", match_not_dot_newline|match_not_dot_null, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab.*?", perl, "ab", match_not_dot_newline|match_not_dot_null, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab.*?", perl, "ab__", match_not_dot_newline|match_not_dot_null, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab__xy_", match_not_dot_newline|match_not_dot_null, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab____xy_", match_not_dot_newline|match_not_dot_null, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab_____xy_", match_not_dot_newline|match_not_dot_null, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab__xy", match_not_dot_newline|match_not_dot_null, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab_____xy", match_not_dot_newline|match_not_dot_null, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?", perl, "ab__", match_not_dot_newline|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?", perl, "ab_______", match_not_dot_newline|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}?xy", perl, "ab______xy", match_not_dot_newline|match_not_dot_null, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab.{2,5}xy", perl, "ab_xy", match_not_dot_newline|match_not_dot_null, make_array(-2, -2)); + + // now again for single character repeats: + TEST_REGEX_SEARCH("ab_*xy", perl, "abxy_", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab_*xy", perl, "ab_xy_", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab_*xy", perl, "abxy", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab_*xy", perl, "ab_xy", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab_*", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab_*", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab_*?z", perl, "ab__", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab_{2,5}xy", perl, "ab__xy_", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}xy", perl, "ab____xy_", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}xy", perl, "ab_____xy_", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}xy", perl, "ab__xy", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}xy", perl, "ab_____xy", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}", perl, "ab_______", match_default, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}xy", perl, "ab______xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}xy", perl, "ab_xy", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab_*?xy", perl, "abxy_", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab_*?xy", perl, "ab_xy_", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab_*?xy", perl, "abxy", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab_*?xy", perl, "ab_xy", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab_*?", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab_*?", perl, "ab__", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("ab_{2,5}?xy", perl, "ab__xy_", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}?xy", perl, "ab____xy_", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}?xy", perl, "ab_____xy_", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}?xy", perl, "ab__xy", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}?xy", perl, "ab_____xy", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}?", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}?", perl, "ab_______", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}?xy", perl, "ab______xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab_{2,5}xy", perl, "ab_xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(5*?).somesite", perl, "//555.somesite", match_default, make_array(2, 14, 2, 5, -2, -2)); +} + +void test_fast_repeats2() +{ + using namespace boost::regex_constants; + // and again for sets: + TEST_REGEX_SEARCH("ab[_,;]*xy", perl, "abxy_", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*xy", perl, "ab_xy_", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*xy", perl, "abxy", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*xy", perl, "ab_xy", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?xy", perl, "ab__z", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?z", perl, "ab__", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?.z", perl, "ab__,;,__z", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?.z", perl, "ab__,;,__y", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab[_,;]{2,5}xy", perl, "ab__xy_", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}xy", perl, "ab____xy_", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}xy", perl, "ab_____xy_", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}xy", perl, "ab__xy", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}xy", perl, "ab_____xy", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}", perl, "ab_______", match_default, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}xy", perl, "ab______xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}xy", perl, "ab_xy", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab[_,;]*?xy", perl, "abxy_", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?xy", perl, "ab_xy_", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?xy", perl, "abxy", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?xy", perl, "ab_xy", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]*?", perl, "ab__", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("ab[_,;]{2,5}?xy", perl, "ab__xy_", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}?xy", perl, "ab____xy_", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}?xy", perl, "ab_____xy_", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}?xy", perl, "ab__xy", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}?xy", perl, "ab_____xy", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}?", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}?", perl, "ab_______", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}?xy", perl, "ab______xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab[_,;]{2,5}xy", perl, "ab_xy", match_default, make_array(-2, -2)); + + // and again for tricky sets with digraphs: + TEST_REGEX_SEARCH("ab[_[.ae.]]*xy", perl, "abxy_", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*xy", perl, "ab_xy_", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*xy", perl, "abxy", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*xy", perl, "ab_xy", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}xy", perl, "ab__xy_", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}xy", perl, "ab____xy_", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}xy", perl, "ab_____xy_", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}xy", perl, "ab__xy", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}xy", perl, "ab_____xy", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}", perl, "ab_______", match_default, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}xy", perl, "ab______xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}xy", perl, "ab_xy", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("ab[_[.ae.]]*?xy", perl, "abxy_", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*?xy", perl, "ab_xy_", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*?xy", perl, "abxy", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*?xy", perl, "ab_xy", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*?", perl, "ab", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]*?", perl, "ab__", match_default, make_array(0, 2, -2, -2)); + + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}?xy", perl, "ab__xy_", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}?xy", perl, "ab____xy_", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}?xy", perl, "ab_____xy_", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}?xy", perl, "ab__xy", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}?xy", perl, "ab_____xy", match_default, make_array(0, 9, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}?", perl, "ab__", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}?", perl, "ab_______", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}?xy", perl, "ab______xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("ab[_[.ae.]]{2,5}xy", perl, "ab_xy", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("([5[.ae.]]*?).somesite", perl, "//555.somesite", match_default, make_array(2, 14, 2, 5, -2, -2)); + + TEST_REGEX_SEARCH("A[^B]*?B.*?C", perl, "AxBxxxx", match_default|match_partial, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?B.*?C", perl, "AxBx", match_default|match_partial, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?B.*?C", perl, "AxBxxxx", match_default|match_partial|match_not_dot_null, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?B.*?C", perl, "AxBx", match_default|match_partial|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?Bx*?C", perl, "AxBxxxx", match_default|match_partial|match_not_dot_null, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?Bx*?C", perl, "AxBx", match_default|match_partial|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?B[xac]*?C", perl, "AxBxxxx", match_default|match_partial|match_not_dot_null, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?B[xac]*?C", perl, "AxBx", match_default|match_partial|match_not_dot_null, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?B[xac[.ae.]]*?C", perl, "AxBxxxx", match_default|match_partial|match_not_dot_null, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("A[^B]*?B[xac[.ae.]]*?C", perl, "AxBx", match_default|match_partial|match_not_dot_null, make_array(0, 4, -2, -2)); + + +} + +void test_pocessive_repeats() +{ + using namespace boost::regex_constants; + // and again for sets: + TEST_REGEX_SEARCH("^(\\w++|\\s++)*$", perl, "now is the time for all good men to come to the aid of the party", match_default, make_array(0, 64, 59, 64, -2, -2)); + TEST_REGEX_SEARCH("^(\\w++|\\s++)*$", perl, "this is not a line with only words and spaces!", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(\\d++)(\\w)", perl, "12345a", match_default, make_array(0, 6, 0, 5, 5, 6, -2, -2)); + TEST_REGEX_SEARCH("(\\d++)(\\w)", perl, "12345+", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(\\d++)(\\w)", perl, "12345", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a++b", perl, "aaab", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("(a++b)", perl, "aaab", match_default, make_array(0, 4, 0, 4, -2, -2)); + TEST_REGEX_SEARCH("([^()]++|\\([^()]*\\))+", perl, "((abc(ade)ufh()()x", match_default, make_array(2, 18, 17, 18, -2, -2)); + TEST_REGEX_SEARCH("\\(([^()]++|\\([^()]+\\))+\\)", perl, "(abc)", match_default, make_array(0, 5, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("\\(([^()]++|\\([^()]+\\))+\\)", perl, "(abc(def)xyz)", match_default, make_array(0, 13, 9, 12, -2, -2)); + TEST_REGEX_SEARCH("\\(([^()]++|\\([^()]+\\))+\\)", perl, "((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", match_default, make_array(-2, -2)); + /* + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<>", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abcd>", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc <123> hij>", match_default, make_array(0, 15, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc <def> hij>", match_default, make_array(5, 10, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc<>def>", match_default, make_array(0, 10, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc<>", match_default, make_array(4, 6, -2, -2)); + TEST_REGEX_SEARCH("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", perl|mod_x, "<abc", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH("((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))", perl|mod_x, "<>", match_default, make_array(0, 2, 0, 2, 0, 2, -2, -2)); + TEST_REGEX_SEARCH("((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))", perl|mod_x, "<abcd>", match_default, make_array(0, 6, 0, 6, 0, 6, -2, -2)); + TEST_REGEX_SEARCH("((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))", perl|mod_x, "<abc <123> hij>", match_default, make_array(0, 15, 0, 15, 0, 15, -2, -2)); + TEST_REGEX_SEARCH("((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))", perl|mod_x, "<abc <def> hij>", match_default, make_array(5, 10, 5, 10, 5, 10, -2, -2)); + TEST_REGEX_SEARCH("((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))", perl|mod_x, "<abc<>def>", match_default, make_array(0, 10, 0, 10, 0, 10, -2, -2)); + TEST_REGEX_SEARCH("((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))", perl|mod_x, "<abc<>", match_default, make_array(4, 6, 4, 6, 4, 6, -2, -2)); + TEST_REGEX_SEARCH("((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))", perl|mod_x, "<abc", match_default, make_array(-2, -2)); + */ + TEST_REGEX_SEARCH("x*+\\w", perl, "xxxxx", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("x*+\\w", perl, "xxxxxa", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("x{1,6}+\\w", perl, "xxxxx", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("x{1,6}+\\w", perl, "xxxxxa", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("x{1,5}+\\w", perl, "xxxxxa", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("x{1,4}+\\w", perl, "xxxxxa", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("x{1,3}+\\w", perl, "xxxxxa", match_default, make_array(0, 4, -2, 4, 6, -2, -2)); + TEST_INVALID_REGEX("\\d+++", perl); + TEST_INVALID_REGEX("\\d++*", perl); + TEST_INVALID_REGEX("\\d++?", perl); + TEST_INVALID_REGEX("\\d++{3}", perl); + TEST_INVALID_REGEX("\\d*++", perl); + TEST_INVALID_REGEX("\\d?++", perl); + TEST_INVALID_REGEX("\\d{1,2}++", perl); +} + diff --git a/libs/regex/test/regress/test_tricky_cases.cpp b/libs/regex/test/regress/test_tricky_cases.cpp new file mode 100644 index 0000000000..033c3deac9 --- /dev/null +++ b/libs/regex/test/regress/test_tricky_cases.cpp @@ -0,0 +1,438 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +void test_tricky_cases2(); +void test_tricky_cases3(); + +void test_tricky_cases() +{ + using namespace boost::regex_constants; + // + // now follows various complex expressions designed to try and bust the matcher: + // + TEST_REGEX_SEARCH("a(((b)))c", perl, "abc", match_default, make_array(0, 3, 1, 2, 1, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", perl, "abd", match_default, make_array(0, 3, 1, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", perl, "acd", match_default, make_array(0, 3, 1, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c)d", perl, "abbd", match_default, make_array(0, 4, 1, 3, -2, -2)); + // just gotta have one DFA-buster, of course + TEST_REGEX_SEARCH("a[ab]{20}", perl, "aaaaabaaaabaaaabaaaab", match_default, make_array(0, 21, -2, -2)); + // and an inline expansion in case somebody gets tricky + TEST_REGEX_SEARCH("a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]", perl, "aaaaabaaaabaaaabaaaab", match_default, make_array(0, 21, -2, -2)); + // and in case somebody just slips in an NFA... + TEST_REGEX_SEARCH("a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night)", perl, "aaaaabaaaabaaaabaaaabweeknights", match_default, make_array(0, 31, 21, 24, 24, 31, -2, -2)); + // one really big one + TEST_REGEX_SEARCH("1234567890123456789012345678901234567890123456789012345678901234567890", perl, "a1234567890123456789012345678901234567890123456789012345678901234567890b", match_default, make_array(1, 71, -2, -2)); + // fish for problems as brackets go past 8 + TEST_REGEX_SEARCH("[ab][cd][ef][gh][ij][kl][mn]", perl, "xacegikmoq", match_default, make_array(1, 8, -2, -2)); + TEST_REGEX_SEARCH("[ab][cd][ef][gh][ij][kl][mn][op]", perl, "xacegikmoq", match_default, make_array(1, 9, -2, -2)); + TEST_REGEX_SEARCH("[ab][cd][ef][gh][ij][kl][mn][op][qr]", perl, "xacegikmoqy", match_default, make_array(1, 10, -2, -2)); + TEST_REGEX_SEARCH("[ab][cd][ef][gh][ij][kl][mn][op][q]", perl, "xacegikmoqy", match_default, make_array(1, 10, -2, -2)); + // and as parenthesis go past 9: + TEST_REGEX_SEARCH("(a)(b)(c)(d)(e)(f)(g)(h)", perl, "zabcdefghi", match_default, make_array(1, 9, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, -2, -2)); + TEST_REGEX_SEARCH("(a)(b)(c)(d)(e)(f)(g)(h)(i)", perl, "zabcdefghij", match_default, make_array(1, 10, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, -2, -2)); + TEST_REGEX_SEARCH("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)", perl, "zabcdefghijk", match_default, make_array(1, 11, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, -2, -2)); + TEST_REGEX_SEARCH("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)", perl, "zabcdefghijkl", match_default, make_array(1, 12, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, -2, -2)); + TEST_REGEX_SEARCH("(a)d|(b)c", perl, "abc", match_default, make_array(1, 3, -1, -1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("_+((www)|(ftp)|(mailto)):_*", perl, "_wwwnocolon _mailto:", match_default, make_array(12, 20, 13, 19, -1, -1, -1, -1, 13, 19, -2, -2)); + // subtleties of matching + TEST_REGEX_SEARCH("a(b)?c\\1d", perl, "acd", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("a(b?c)+d", perl, "accd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("(wee|week)(knights|night)", perl, "weeknights", match_default, make_array(0, 10, 0, 3, 3, 10, -2, -2)); + TEST_REGEX_SEARCH(".*", perl, "abc", match_default, make_array(0, 3, -2, 3, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", perl, "abd", match_default, make_array(0, 3, 1, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", perl, "acd", match_default, make_array(0, 3, 1, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", perl, "abbd", match_default, make_array(0, 4, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", perl, "acd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", perl, "ad", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a(b?)c", perl, "abc", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b?)c", perl, "ac", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a(b+)c", perl, "abc", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b+)c", perl, "abbbc", match_default, make_array(0, 5, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c", perl, "ac", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("(a|ab)(bc([de]+)f|cde)", perl, "abcdef", match_default, make_array(0, 6, 0, 1, 1, 6, 3, 5, -2, -2)); + TEST_REGEX_SEARCH("a([bc]?)c", perl, "abc", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a([bc]?)c", perl, "ac", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)c", perl, "abc", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)c", perl, "abcc", match_default, make_array(0, 4, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)bc", perl, "abcbc", match_default, make_array(0, 5, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(bb+|b)b", perl, "abb", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl, "abb", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", perl, "abbb", match_default, make_array(0, 4, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)bb", perl, "abbb", match_default, make_array(0, 4, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("(.*).*", perl, "abcdef", match_default, make_array(0, 6, 0, 6, -2, 6, 6, 6, 6, -2, -2)); + TEST_REGEX_SEARCH("(a*)*", perl, "bc", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("Z(((((((a+)+)+)+)+)+)+)+|Y(((((((a+)+)+)+)+)+)+)+|X(((((((a+)+)+)+)+)+)+)+|W(((((((a+)+)+)+)+)+)+)+|V(((((((a+)+)+)+)+)+)+)+|CZ(((((((a+)+)+)+)+)+)+)+|CY(((((((a+)+)+)+)+)+)+)+|CX(((((((a+)+)+)+)+)+)+)+|CW(((((((a+)+)+)+)+)+)+)+|CV(((((((a+)+)+)+)+)+)+)+|(a+)+", perl, "bc", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("Z(((((((a+)+)+)+)+)+)+)+|Y(((((((a+)+)+)+)+)+)+)+|X(((((((a+)+)+)+)+)+)+)+|W(((((((a+)+)+)+)+)+)+)+|V(((((((a+)+)+)+)+)+)+)+|CZ(((((((a+)+)+)+)+)+)+)+|CY(((((((a+)+)+)+)+)+)+)+|CX(((((((a+)+)+)+)+)+)+)+|CW(((((((a+)+)+)+)+)+)+)+|CV(((((((a+)+)+)+)+)+)+)+|(a+)+", perl, "aaa", match_default, + make_array(0, 3, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 3, + -2, -2)); + TEST_REGEX_SEARCH("Z(((((((a+)+)+)+)+)+)+)+|Y(((((((a+)+)+)+)+)+)+)+|X(((((((a+)+)+)+)+)+)+)+|W(((((((a+)+)+)+)+)+)+)+|V(((((((a+)+)+)+)+)+)+)+|CZ(((((((a+)+)+)+)+)+)+)+|CY(((((((a+)+)+)+)+)+)+)+|CX(((((((a+)+)+)+)+)+)+)+|CW(((((((a+)+)+)+)+)+)+)+|CV(((((((a+)+)+)+)+)+)+)+|(a+)+", + perl, "Zaaa", match_default, + make_array(0, 4, + 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, + -2, -2)); + TEST_REGEX_SEARCH("xyx*xz", perl, "xyxxxxyxxxz", match_default, make_array(5, 11, -2, -2)); + // do we get the right subexpression when it is used more than once? + TEST_REGEX_SEARCH("a(b|c)*d", perl, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)*d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)+d", perl, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)+d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c?)+d", perl, "ad", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,0}d", perl, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,1}d", perl, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,1}d", perl, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,2}d", perl, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,2}d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,}d", perl, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,}d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,1}d", perl, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,2}d", perl, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,2}d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,}d", perl, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,}d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,2}d", perl, "acbd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,2}d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,4}d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,4}d", perl, "abcbd", match_default, make_array(0, 5, 3, 4, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,4}d", perl, "abcbcd", match_default, make_array(0, 6, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,}d", perl, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,}d", perl, "abcbd", match_default, make_array(0, 5, 3, 4, -2, -2)); + + test_tricky_cases2(); + test_tricky_cases3(); +} + +void test_tricky_cases2() +{ + using namespace boost::regex_constants; + + TEST_REGEX_SEARCH("a(((b)))c", boost::regex::extended, "abc", match_default, make_array(0, 3, 1, 2, 1, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", boost::regex::extended, "abd", match_default, make_array(0, 3, 1, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", boost::regex::extended, "acd", match_default, make_array(0, 3, 1, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c)d", boost::regex::extended, "abbd", match_default, make_array(0, 4, 1, 3, -2, -2)); + // just gotta have one DFA-buster, of course + TEST_REGEX_SEARCH("a[ab]{20}", boost::regex::extended, "aaaaabaaaabaaaabaaaab", match_default, make_array(0, 21, -2, -2)); + // and an inline expansion in case somebody gets tricky + TEST_REGEX_SEARCH("a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]", boost::regex::extended, "aaaaabaaaabaaaabaaaab", match_default, make_array(0, 21, -2, -2)); + // and in case somebody just slips in an NFA... + TEST_REGEX_SEARCH("a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night)", boost::regex::extended, "aaaaabaaaabaaaabaaaabweeknights", match_default, make_array(0, 31, 21, 24, 24, 31, -2, -2)); + // one really big one + TEST_REGEX_SEARCH("1234567890123456789012345678901234567890123456789012345678901234567890", boost::regex::extended, "a1234567890123456789012345678901234567890123456789012345678901234567890b", match_default, make_array(1, 71, -2, -2)); + // fish for problems as brackets go past 8 + TEST_REGEX_SEARCH("[ab][cd][ef][gh][ij][kl][mn]", boost::regex::extended, "xacegikmoq", match_default, make_array(1, 8, -2, -2)); + TEST_REGEX_SEARCH("[ab][cd][ef][gh][ij][kl][mn][op]", boost::regex::extended, "xacegikmoq", match_default, make_array(1, 9, -2, -2)); + TEST_REGEX_SEARCH("[ab][cd][ef][gh][ij][kl][mn][op][qr]", boost::regex::extended, "xacegikmoqy", match_default, make_array(1, 10, -2, -2)); + TEST_REGEX_SEARCH("[ab][cd][ef][gh][ij][kl][mn][op][q]", boost::regex::extended, "xacegikmoqy", match_default, make_array(1, 10, -2, -2)); + // and as parenthesis go past 9: + TEST_REGEX_SEARCH("(a)(b)(c)(d)(e)(f)(g)(h)", boost::regex::extended, "zabcdefghi", match_default, make_array(1, 9, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, -2, -2)); + TEST_REGEX_SEARCH("(a)(b)(c)(d)(e)(f)(g)(h)(i)", boost::regex::extended, "zabcdefghij", match_default, make_array(1, 10, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, -2, -2)); + TEST_REGEX_SEARCH("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)", boost::regex::extended, "zabcdefghijk", match_default, make_array(1, 11, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, -2, -2)); + TEST_REGEX_SEARCH("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)", boost::regex::extended, "zabcdefghijkl", match_default, make_array(1, 12, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, -2, -2)); + TEST_REGEX_SEARCH("(a)d|(b)c", boost::regex::extended, "abc", match_default, make_array(1, 3, -1, -1, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("_+((www)|(ftp)|(mailto)):_*", boost::regex::extended, "_wwwnocolon _mailto:", match_default, make_array(12, 20, 13, 19, -1, -1, -1, -1, 13, 19, -2, -2)); + // subtleties of matching + TEST_REGEX_SEARCH("a\\(b\\)\\?c\\1d", basic|bk_plus_qm, "acd", match_default, make_array(0, 3, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b?c)+d", boost::regex::extended, "accd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("(wee|week)(knights|night)", boost::regex::extended, "weeknights", match_default, make_array(0, 10, 0, 3, 3, 10, -2, -2)); + TEST_REGEX_SEARCH(".*", boost::regex::extended, "abc", match_default, make_array(0, 3, -2, 3, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", boost::regex::extended, "abd", match_default, make_array(0, 3, 1, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|(c))d", boost::regex::extended, "acd", match_default, make_array(0, 3, 1, 2, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", boost::regex::extended, "abbd", match_default, make_array(0, 4, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", boost::regex::extended, "acd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b*|c|e)d", boost::regex::extended, "ad", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a(b?)c", boost::regex::extended, "abc", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b?)c", boost::regex::extended, "ac", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a(b+)c", boost::regex::extended, "abc", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b+)c", boost::regex::extended, "abbbc", match_default, make_array(0, 5, 1, 4, -2, -2)); + TEST_REGEX_SEARCH("a(b*)c", boost::regex::extended, "ac", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("(a|ab)(bc([de]+)f|cde)", boost::regex::extended, "abcdef", match_default, make_array(0, 6, 0, 1, 1, 6, 3, 5, -2, -2)); + TEST_REGEX_SEARCH("a([bc]?)c", boost::regex::extended, "abc", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a([bc]?)c", boost::regex::extended, "ac", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)c", boost::regex::extended, "abc", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)c", boost::regex::extended, "abcc", match_default, make_array(0, 4, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a([bc]+)bc", boost::regex::extended, "abcbc", match_default, make_array(0, 5, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(bb+|b)b", boost::regex::extended, "abb", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", boost::regex::extended, "abb", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)b", boost::regex::extended, "abbb", match_default, make_array(0, 4, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("a(bbb+|bb+|b)bb", boost::regex::extended, "abbb", match_default, make_array(0, 4, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("(.*).*", boost::regex::extended, "abcdef", match_default, make_array(0, 6, 0, 6, -2, 6, 6, 6, 6, -2, -2)); + TEST_REGEX_SEARCH("(a*)*", boost::regex::extended, "bc", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, -2)); + TEST_REGEX_SEARCH("xyx*xz", boost::regex::extended, "xyxxxxyxxxz", match_default, make_array(5, 11, -2, -2)); + // do we get the right subexpression when it is used more than once? + TEST_REGEX_SEARCH("a(b|c)*d", boost::regex::extended, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)*d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)+d", boost::regex::extended, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c)+d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c?)+d", boost::regex::extended, "ad", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,0}d", boost::regex::extended, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,1}d", boost::regex::extended, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,1}d", boost::regex::extended, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,2}d", boost::regex::extended, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,2}d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,}d", boost::regex::extended, "ad", match_default, make_array(0, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){0,}d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,1}d", boost::regex::extended, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,2}d", boost::regex::extended, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,2}d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,}d", boost::regex::extended, "abd", match_default, make_array(0, 3, 1, 2, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){1,}d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,2}d", boost::regex::extended, "acbd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,2}d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,4}d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,4}d", boost::regex::extended, "abcbd", match_default, make_array(0, 5, 3, 4, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,4}d", boost::regex::extended, "abcbcd", match_default, make_array(0, 6, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,}d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|c){2,}d", boost::regex::extended, "abcbd", match_default, make_array(0, 5, 3, 4, -2, -2)); + // perl only: + TEST_REGEX_SEARCH("a(b|c?)+d", perl, "abcd", match_default, make_array(0, 4, 3, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b+|((c)*))+d", perl, "abd", match_default, make_array(0, 3, 2, 2, 2, 2, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b+|((c)*))+d", perl, "abcd", match_default, make_array(0, 4, 3, 3, 3, 3, 2, 3, -2, -2)); + // posix only: + TEST_REGEX_SEARCH("a(b|c?)+d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b|((c)*))+d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, 2, 3, 2, 3, -2, -2)); + TEST_REGEX_SEARCH("a(b+|((c)*))+d", boost::regex::extended, "abd", match_default, make_array(0, 3, 1, 2, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("a(b+|((c)*))+d", boost::regex::extended, "abcd", match_default, make_array(0, 4, 2, 3, 2, 3, 2, 3, -2, -2)); + // literals: + TEST_REGEX_SEARCH("\\**?/{}", literal, "\\**?/{}", match_default, make_array(0, 7, -2, -2)); + TEST_REGEX_SEARCH("\\**?/{}", literal, "\\**?/{", match_default, make_array(-2, -2)); + // try to match C++ syntax elements: + // line comment: + TEST_REGEX_SEARCH("//[^\\n]*", perl, "++i //here is a line comment\n", match_default, make_array(4, 28, -2, -2)); + // block comment: + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", perl, "/* here is a block comment */", match_default, make_array(0, 29, 26, 27, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", perl, "/**/", match_default, make_array(0, 4, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", perl, "/***/", match_default, make_array(0, 5, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", perl, "/****/", match_default, make_array(0, 6, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", perl, "/*****/", match_default, make_array(0, 7, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", perl, "/*****/*/", match_default, make_array(0, 7, -1, -1, -2, -2)); + // preprossor directives: + TEST_REGEX_SEARCH("^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*", perl, "#define some_symbol", match_default, make_array(0, 19, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*", perl, "#define some_symbol(x) #x", match_default, make_array(0, 25, -1, -1, -2, -2)); + // try to match C++ syntax elements: + // line comment: + TEST_REGEX_SEARCH("//[^\\n]*", boost::regex::extended&~no_escape_in_lists, "++i //here is a line comment\n", match_default, make_array(4, 28, -2, -2)); + // block comment: + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", boost::regex::extended&~no_escape_in_lists, "/* here is a block comment */", match_default, make_array(0, 29, 26, 27, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", boost::regex::extended&~no_escape_in_lists, "/**/", match_default, make_array(0, 4, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", boost::regex::extended&~no_escape_in_lists, "/***/", match_default, make_array(0, 5, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", boost::regex::extended&~no_escape_in_lists, "/****/", match_default, make_array(0, 6, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", boost::regex::extended&~no_escape_in_lists, "/*****/", match_default, make_array(0, 7, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("/\\*([^*]|\\*+[^*/])*\\*+/", boost::regex::extended&~no_escape_in_lists, "/*****/*/", match_default, make_array(0, 7, -1, -1, -2, -2)); + // preprossor directives: + TEST_REGEX_SEARCH("^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*", boost::regex::extended&~no_escape_in_lists, "#define some_symbol", match_default, make_array(0, 19, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*", boost::regex::extended&~no_escape_in_lists, "#define some_symbol(x) #x", match_default, make_array(0, 25, -1, -1, -2, -2)); + // perl only: + TEST_REGEX_SEARCH("^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*", perl, "#define some_symbol(x) \\ \r\n foo();\\\r\n printf(#x);", match_default, make_array(0, 53, 30, 42, -2, -2)); + // POSIX leftmost longest checks: + TEST_REGEX_SEARCH("(aaa)|(\\w+)", boost::regex::extended&~no_escape_in_lists, "a", match_default, make_array(0, 1, -1, -1, 0, 1, -2, -2)); + TEST_REGEX_SEARCH("(aaa)|(\\w+)", boost::regex::extended&~no_escape_in_lists, "aa", match_default, make_array(0, 2, -1, -1, 0, 2, -2, -2)); + TEST_REGEX_SEARCH("(aaa)|(\\w+)", boost::regex::extended&~no_escape_in_lists, "aaa", match_default, make_array(0, 3, 0, 3, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("(aaa)|(\\w+)", boost::regex::extended&~no_escape_in_lists, "aaaa", match_default, make_array(0, 4, -1, -1, 0, 4, -2, -2)); + TEST_REGEX_SEARCH("($)|(\\>)", boost::regex::extended&~no_escape_in_lists, "aaaa", match_default, make_array(4, 4, 4, 4, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("($)|(\\>)", boost::regex::extended&~no_escape_in_lists, "aaaa", match_default|match_not_eol, make_array(4, 4, -1, -1, 4, 4, -2, -2)); + TEST_REGEX_SEARCH("(aaa)(ab)*", boost::regex::extended, "aaaabab", match_default, make_array(0, 7, 0, 3, 5, 7, -2, -2)); +} + +void test_tricky_cases3() +{ + using namespace boost::regex_constants; + TEST_REGEX_SEARCH("((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?", perl, "0xFF", match_default, make_array(0, 4, 0, 4, 0, 4, -1, -1, -1, -1, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?", perl, "35", match_default, make_array(0, 2, 0, 2, -1, -1, 0, 2, -1, -1, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?", perl, "0xFFu", match_default, make_array(0, 5, 0, 4, 0, 4, -1, -1, -1, -1, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?", perl, "0xFFL", match_default, make_array(0, 5, 0, 4, 0, 4, -1, -1, 4, 5, -1, -1, -1, -1, -2, -2)); + TEST_REGEX_SEARCH("((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?", perl, "0xFFFFFFFFFFFFFFFFuint64", match_default, make_array(0, 24, 0, 18, 0, 18, -1, -1, 19, 24, 19, 24, 22, 24, -2, -2)); + // strings: + TEST_REGEX_SEARCH("'([^\\\\']|\\\\.)*'", perl, "'\\x3A'", match_default, make_array(0, 6, 4, 5, -2, -2)); + TEST_REGEX_SEARCH("'([^\\\\']|\\\\.)*'", perl, "'\\''", match_default, make_array(0, 4, 1, 3, -2, -2)); + TEST_REGEX_SEARCH("'([^\\\\']|\\\\.)*'", perl, "'\\n'", match_default, make_array(0, 4, 1, 3, -2, -2)); + // posix only: + TEST_REGEX_SEARCH("^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*", awk, "#define some_symbol(x) \\ \r\n foo();\\\r\n printf(#x);", match_default, make_array(0, 53, 28, 42, -2, -2)); + // now try and test some unicode specific characters: +#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560) + TEST_REGEX_SEARCH_W(L"[[:unicode:]]+", perl, L"a\x0300\x0400z", match_default, make_array(1, 3, -2, -2)); + TEST_REGEX_SEARCH_W(L"[\x10-\xff]", perl, L"\x0300\x0400", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH_W(L"[\01-\05]{5}", perl, L"\x0300\x0400\x0300\x0400\x0300\x0400", match_default, make_array(-2, -2)); +#if !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) + TEST_REGEX_SEARCH_W(L"[\x300-\x400]+", perl, L"\x0300\x0400\x0300\x0400\x0300\x0400", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH_W(L"[\\x{300}-\\x{400}]+", perl, L"\x0300\x0400\x0300\x0400\x0300\x0400", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH_W(L"\\x{300}\\x{400}+", perl, L"\x0300\x0400\x0400\x0400\x0400\x0400", match_default, make_array(0, 6, -2, -2)); +#endif +#endif + // finally try some case insensitive matches: + TEST_REGEX_SEARCH("0123456789@abcdefghijklmnopqrstuvwxyz\\[\\\\\\]\\^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ\\{\\|\\}", perl|icase, "0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}", match_default, make_array(0, 72, -2, -2)); + TEST_REGEX_SEARCH("a", perl|icase, "A", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("A", perl|icase, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("[abc]+", perl|icase, "abcABC", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("[ABC]+", perl|icase, "abcABC", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("[a-z]+", perl|icase, "abcABC", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("[A-Z]+", perl|icase, "abzANZ", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("[a-Z]+", perl|icase, "abzABZ", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("[A-z]+", perl|icase, "abzABZ", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("[[:lower:]]+", perl|icase, "abyzABYZ", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("[[:upper:]]+", perl|icase, "abzABZ", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("[[:word:]]+", perl|icase, "abcZZZ", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("[[:alpha:]]+", perl|icase, "abyzABYZ", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("[[:alnum:]]+", perl|icase, "09abyzABYZ", match_default, make_array(0, 10, -2, -2)); + + // known and suspected bugs: + TEST_REGEX_SEARCH("\\(", perl, "(", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\)", perl, ")", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\$", perl, "$", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\^", perl, "^", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\.", perl, ".", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\*", perl, "*", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\+", perl, "+", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\?", perl, "?", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\[", perl, "[", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\]", perl, "]", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\|", perl, "|", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\\\", perl, "\\", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("#", perl, "#", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\#", perl, "#", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a-", perl, "a-", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("\\-", perl, "-", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\{", perl, "{", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\}", perl, "}", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("0", perl, "0", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("1", perl, "1", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("9", perl, "9", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("b", perl, "b", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("B", perl, "B", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("<", perl, "<", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(">", perl, ">", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("w", perl, "w", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("W", perl, "W", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("`", perl, "`", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(" ", perl, " ", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("\\n", perl, "\n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(",", perl, ",", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("a", perl, "a", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("f", perl, "f", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("n", perl, "n", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("r", perl, "r", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("t", perl, "t", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("v", perl, "v", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("c", perl, "c", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("x", perl, "x", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH(":", perl, ":", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH("(\\.[[:alnum:]]+){2}", perl, "w.a.b ", match_default, make_array(1, 5, 3, 5, -2, -2)); + + // new bugs detected in spring 2003: + TEST_REGEX_SEARCH("b", perl, "abc", match_default|match_continuous, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?!foo)bar", perl, "foobar", match_default, make_array(3, 6, -2, -2)); + TEST_REGEX_SEARCH("(?!foo)bar", perl, "??bar", match_default, make_array(2, 5, -2, -2)); + TEST_REGEX_SEARCH("(?!foo)bar", perl, "barfoo", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?!foo)bar", perl, "bar??", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("(?!foo)bar", perl, "bar", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a\\Z", perl, "a\nb", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("()", perl, "abc", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, 2, 2, 2, 2, -2, 3, 3, 3, 3, -2, -2)); + TEST_REGEX_SEARCH("^()", perl, "abc", match_default, make_array(0, 0, 0, 0, -2, -2)); + TEST_REGEX_SEARCH("^()+", perl, "abc", match_default, make_array(0, 0, 0, 0, -2, -2)); + TEST_REGEX_SEARCH("^(){1}", perl, "abc", match_default, make_array(0, 0, 0, 0, -2, -2)); + TEST_REGEX_SEARCH("^(){2}", perl, "abc", match_default, make_array(0, 0, 0, 0, -2, -2)); + TEST_REGEX_SEARCH("^((){2})", perl, "abc", match_default, make_array(0, 0, 0, 0, 0, 0, -2, -2)); + TEST_REGEX_SEARCH("()", perl, "", match_default, make_array(0, 0, 0, 0, -2, -2)); + TEST_REGEX_SEARCH("()\\1", perl, "", match_default, make_array(0, 0, 0, 0, -2, -2)); + TEST_REGEX_SEARCH("()\\1", perl, "a", match_default, make_array(0, 0, 0, 0, -2, 1, 1, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a()\\1b", perl, "ab", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("a()b\\1", perl, "ab", match_default, make_array(0, 2, 1, 1, -2, -2)); + TEST_REGEX_SEARCH("([a-c]+)\\1", perl, "abcbc", match_default, make_array(1, 5, 1, 3, -2, -2)); + TEST_REGEX_SEARCH(".+abc", perl, "xxxxxxxxyyyyyyyyab", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(.+)\\1", perl, "abcdxxxyyyxxxyyy", match_default, make_array(4, 16, 4, 10, -2, -2)); + // this should not throw: + TEST_REGEX_SEARCH("[_]+$", perl, "___________________________________________x", match_default, make_array(-2, -2)); + // bug in V4 code detected 2004/05/12: + TEST_REGEX_SEARCH("\\l+", perl|icase, "abcXYZ", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("\\u+", perl|icase, "abcXYZ", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("(a)(?:b)", perl|nosubs, "ab", match_default, make_array(0, 2, -2, -2)); + // bug reported 2006-09-20: + TEST_REGEX_SEARCH("(?:\\d{9}.*){2}", perl, "123456789dfsdfsdfsfsdfds123456789b", match_default, make_array(0, 34, -2, -2)); + TEST_REGEX_SEARCH("(?:\\d{9}.*){2}", perl, "123456789dfsdfsdfsfsdfds12345678", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("(?:\\d{9}.*){2}", perl, "123456789dfsdfsdfsfsdfds", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3}$", perl, "1.2.03", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3,4}$", perl, "1.2.03", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH("^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3,4}?$", perl, "1.2.03", match_default, make_array(-2, -2)); + + + // + // the strings in the next test case are too long for most compilers to cope with, + // we have to break them up and call the testing procs directly rather than rely on the macros: + // + static const char* big_text = "00001 01 \r\n00002 02 1 2 3 4 5 6" + "7 8 9 0\r\n00003 03 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\r\n" + "00004 04 \r\n00005 05 \r\n00006 06 " + "Seite: 0001\r\n00007 07 " + "StartSeitEEnde: 0001\r\n00008 08 " + "StartSeiTe Ende: 0001\r\n00009 09 " + "Start seiteEnde: 0001\r\n00010 10 " + "28.2.03\r\n00011 11 " + "Page: 0001\r\n00012 12 " + "Juhu die Erste: 0001\r\n00013 13 " + "Es war einmal! 0001\r\n00014 14 ABCDEFGHIJKLMNOPQRSTUVWXYZ0001\r\n" + "00015 15 abcdefghijklmnopqrstuvwxyz0001\r\n" + "00016 16 lars.schmeiser@gft.com\r\n00017 17 \r\n" + "00018 18 \r\n00019 19 \r\n00020 20 \r\n00021 21 1 2 3 4 5 " + "6 7 8 9 0\r\n" + "00022 22 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\r\n" + "00023 01 \r\n00024 02 1 2 3 4 5 6 7 8 9 0\r\n" + "00025 03 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\r\n" + "00026 04 \r\n00027 05 \r\n00028 06 " + "Seite: 0002\r\n00029 07 StartSeitEEnde: 0002\r\n" + "00030 08 " + "StartSeiTe Ende: 0002\r\n00031 09 " + "Start seiteEnde: 0002\r\n00032 10 " + "28.02.2003\r\n00033 11 " + "Page: 0002\r\n00034 12 " + "Juhu die Erste: 0002\r\n00035 13 " + "Es war einmal! 0002\r\n00036 14 ABCDEFGHIJKLMNOPQRSTUVWXYZ0002\r\n00037 " + "15 abcdefghijklmnopqrstuvwxyz0002\r\n00038 16 " + "lars.schmeiser@194.1.12.111\r\n00039 17 \r\n00040 18 \r\n00041 19 \r\n" + "00042 20 \r\n00043 21 1 2 3 4 5 6 7 8 9 0\r\n"; + + do{ + test_info<char>::set_info(__FILE__, __LINE__, + "(.*\\r\\n){3}.* abcdefghijklmnopqrstuvwxyz.*\\r\\n", + perl, big_text, match_default|match_not_dot_newline, + make_array(753, 1076, 934, 1005, -2, 2143, 2466, 2324, 2395, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + do{ + std::string st(big_text); + test_info<wchar_t>::set_info(__FILE__, __LINE__, + L"(.*\\r\\n){3}.* abcdefghijklmnopqrstuvwxyz.*\\r\\n", + perl, std::wstring(st.begin(), st.end()), match_default|match_not_dot_newline, + make_array(753, 1076, 934, 1005, -2, 2143, 2466, 2324, 2395, -2, -2)); + test(char(0), test_regex_search_tag()); + }while(0); +#endif +} + diff --git a/libs/regex/test/regress/test_unicode.cpp b/libs/regex/test/regress/test_unicode.cpp new file mode 100644 index 0000000000..eed5b4563a --- /dev/null +++ b/libs/regex/test/regress/test_unicode.cpp @@ -0,0 +1,170 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE test_unicode.hpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Unicode specific tests (requires ICU). + */ + +#include <boost/regex/config.hpp> +#ifdef BOOST_HAS_ICU +#include "test.hpp" + +#ifdef BOOST_MSVC +#pragma warning(disable:4127) +#endif + +#ifndef BOOST_NO_STD_WSTRING + +#define TEST_REGEX_SEARCH_U(s, f, t, m, a)\ + do{\ + const wchar_t e[] = { s };\ + std::wstring se(e, (sizeof(e) / sizeof(wchar_t)) - 1);\ + const wchar_t st[] = { t };\ + std::wstring sst(st, (sizeof(st) / sizeof(wchar_t)) - 1);\ + test_info<wchar_t>::set_info(__FILE__, __LINE__, se, f, sst, m, a);\ + test_icu(wchar_t(0), test_regex_search_tag());\ + }while(0) + +#define TEST_REGEX_CLASS_U(classname, character)\ + TEST_REGEX_SEARCH_U(\ + L"[[:" BOOST_JOIN(L, BOOST_STRINGIZE(classname)) L":]]",\ + perl, \ + BOOST_JOIN(L, \ + BOOST_STRINGIZE(\ + BOOST_JOIN(\x, character))), \ + match_default, \ + make_array(0, 1, -2, -2)) + +#else + +#define TEST_REGEX_SEARCH_U(s, f, t, m, a) +#define TEST_REGEX_CLASS_U(classname, character) + +#endif + +void test_unicode() +{ + using namespace boost::regex_constants; + + TEST_REGEX_CLASS_U(L*, 3108); + TEST_REGEX_CLASS_U(Letter, 3108); + TEST_REGEX_CLASS_U(Lu, 2145); + TEST_REGEX_CLASS_U(Uppercase Letter, 2145); + TEST_REGEX_CLASS_U(Ll, 2146); + TEST_REGEX_CLASS_U(Lowercase Letter, 2146); + TEST_REGEX_CLASS_U(Lt, 1FFC); + TEST_REGEX_CLASS_U(Titlecase Letter, 1FFC); + TEST_REGEX_CLASS_U(Lm, 1D61); + TEST_REGEX_CLASS_U(Modifier Letter, 1D61); + TEST_REGEX_CLASS_U(Lo, 1974); + TEST_REGEX_CLASS_U(Other Letter, 1974); + TEST_REGEX_CLASS_U(M*, 20EA); + TEST_REGEX_CLASS_U(Mark, 20EA); + TEST_REGEX_CLASS_U(Mn, 20EA); + TEST_REGEX_CLASS_U(Non-Spacing Mark, 20EA); + TEST_REGEX_CLASS_U(Mc, 1938); + TEST_REGEX_CLASS_U(Spacing Combining Mark, 1938); + TEST_REGEX_CLASS_U(Me, 0488); + TEST_REGEX_CLASS_U(Enclosing Mark, 0488); + TEST_REGEX_CLASS_U(N*, 0669); + TEST_REGEX_CLASS_U(Number, 0669); + TEST_REGEX_CLASS_U(Nd, 0669); + TEST_REGEX_CLASS_U(Decimal Digit Number, 0669); + TEST_REGEX_CLASS_U(Nl, 303A); + TEST_REGEX_CLASS_U(Letter Number, 303A); + TEST_REGEX_CLASS_U(No, 2793); + TEST_REGEX_CLASS_U(Other Number, 2793); + + TEST_REGEX_CLASS_U(S*, 2144); + TEST_REGEX_CLASS_U(Symbol, 2144); + TEST_REGEX_CLASS_U(Sm, 2144); + TEST_REGEX_CLASS_U(Math Symbol, 2144); + TEST_REGEX_CLASS_U(Sc, 20B1); + TEST_REGEX_CLASS_U(Currency Symbol, 20B1); + TEST_REGEX_CLASS_U(Sk, 1FFE); + TEST_REGEX_CLASS_U(Modifier Symbol, 1FFE); + TEST_REGEX_CLASS_U(So, 19FF); + TEST_REGEX_CLASS_U(Other Symbol, 19FF); + + TEST_REGEX_CLASS_U(P*, 005F); + TEST_REGEX_CLASS_U(Punctuation, 005F); + TEST_REGEX_CLASS_U(Pc, 005F); + TEST_REGEX_CLASS_U(Connector Punctuation, 005F); + TEST_REGEX_CLASS_U(Pd, 002D); + TEST_REGEX_CLASS_U(Dash Punctuation, 002D); + TEST_REGEX_CLASS_U(Ps, 0028); + TEST_REGEX_CLASS_U(Open Punctuation, 0028); + TEST_REGEX_CLASS_U(Pe, FF63); + TEST_REGEX_CLASS_U(Close Punctuation, FF63); + TEST_REGEX_CLASS_U(Pi, 2039); + TEST_REGEX_CLASS_U(Initial Punctuation, 2039); + TEST_REGEX_CLASS_U(Pf, 203A); + TEST_REGEX_CLASS_U(Final Punctuation, 203A); + TEST_REGEX_CLASS_U(Po, 2038); + TEST_REGEX_CLASS_U(Other Punctuation, 2038); + + TEST_REGEX_CLASS_U(Z*, 202F); + TEST_REGEX_CLASS_U(Separator, 202F); + TEST_REGEX_CLASS_U(Zs, 202F); + TEST_REGEX_CLASS_U(Space Separator, 202F); + TEST_REGEX_CLASS_U(Zl, 2028); + TEST_REGEX_CLASS_U(Line Separator, 2028); + TEST_REGEX_CLASS_U(Zp, 2029); + TEST_REGEX_CLASS_U(Paragraph Separator, 2029); +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + // Some tests have to be disabled for VC6 because the compiler + // mangles the string literals... + TEST_REGEX_CLASS_U(C*, 009F); + TEST_REGEX_CLASS_U(Other, 009F); + TEST_REGEX_CLASS_U(Cc, 009F); + TEST_REGEX_CLASS_U(Control, 009F); +#endif + TEST_REGEX_CLASS_U(Cf, FFFB); + TEST_REGEX_CLASS_U(Format, FFFB); + //TEST_REGEX_CLASS_U(Cs, DC00); + //TEST_REGEX_CLASS_U(Surrogate, DC00); + TEST_REGEX_CLASS_U(Co, F8FF); + TEST_REGEX_CLASS_U(Private Use, F8FF); + TEST_REGEX_CLASS_U(Cn, FFFF); + TEST_REGEX_CLASS_U(Not Assigned, FFFF); + TEST_REGEX_CLASS_U(Any, 2038); + TEST_REGEX_CLASS_U(Assigned, 2038); + TEST_REGEX_CLASS_U(ASCII, 7f); + TEST_REGEX_SEARCH_U(L"[[:Assigned:]]", perl, L"\xffff", match_default, make_array(-2, -2)); + TEST_REGEX_SEARCH_U(L"[[:ASCII:]]", perl, L"\x80", match_default, make_array(-2, -2)); + + TEST_REGEX_SEARCH_U(L"\\N{KHMER DIGIT SIX}", perl, L"\x17E6", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH_U(L"\\N{MODIFIER LETTER LOW ACUTE ACCENT}", perl, L"\x02CF", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH_U(L"\\N{SUPERSCRIPT ONE}", perl, L"\x00B9", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH_U(L"[\\N{KHMER DIGIT SIX}]", perl, L"\x17E6", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH_U(L"[\\N{MODIFIER LETTER LOW ACUTE ACCENT}]", perl, L"\x02CF", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH_U(L"[\\N{SUPERSCRIPT ONE}]", perl, L"\x00B9", match_default, make_array(0, 1, -2, -2)); + TEST_REGEX_SEARCH_U(L"\\N{CJK UNIFIED IDEOGRAPH-7FED}", perl, L"\x7FED", match_default, make_array(0, 1, -2, -2)); +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + // Some tests have to be disabled for VC6 because the compiler + // mangles the string literals... + TEST_REGEX_SEARCH_U(L"\\w+", perl, L" e\x301" L"coute ", match_default, make_array(1, 8, -2, -2)); + + TEST_REGEX_SEARCH_U(L"^", perl, L" \x2028 \x2029 \x000D\x000A \x000A \x000C \x000D \x0085 ", + match_default | match_not_bol, make_array(2, 2, -2, 4, 4, -2, 7, 7, -2, 9, 9, -2, 11, 11, -2, 13, 13, -2, 15, 15, -2, -2)); + TEST_REGEX_SEARCH_U(L"$", perl, L" \x2028 \x2029 \x000D\x000A \x000A \x000C \x000D \x0085 ", + match_default | match_not_eol, make_array(1, 1, -2, 3, 3, -2, 5, 5, -2, 8, 8, -2, 10, 10, -2, 12, 12, -2, 14, 14, -2, -2)); + TEST_REGEX_SEARCH_U(L".", perl, L" \x2028\x2029\x000D\x000A\x000A\x000C\x000D\x0085 ", + match_default | match_not_dot_newline, make_array(0, 1, -2, 9, 10, -2, -2)); +#endif +} + +#else +void test_unicode(){} +#endif diff --git a/libs/regex/test/regress/vc6-stlport.mak b/libs/regex/test/regress/vc6-stlport.mak new file mode 100644 index 0000000000..4e1acff08f --- /dev/null +++ b/libs/regex/test/regress/vc6-stlport.mak @@ -0,0 +1,77 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for regression tests +# +# Visual C++ 6 + full stlport 4.x +# +# we don't test single threaded builds as stlport doesn't support these... +# +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional debugging options here: +# +CXXDEBUG=/D_STLP_DEBUG=1 +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# sources to compile for each test: +# +SOURCES=*.cpp + +!IF "$(MSVCDIR)" == "" +!ERROR Variable MSVCDIR not set. +!ENDIF + +!IF "$(STLPORT_PATH)" == "" +!ERROR Variable STLPORT_PATH not set. +!ENDIF + + +CFLAGS= $(INCLUDES) /I$(STLPORT_PATH)\stlport /Zm400 /GF /Gy -GX -GR -I..\..\..\..\ $(CXXFLAGS) /DBOOST_LIB_DIAGNOSTIC=1 + +LFLAGS= -link /LIBPATH:..\..\..\..\stage\lib /LIBPATH:..\..\build\vc6-stlport /LIBPATH:$(STLPORT_PATH)\lib user32.lib $(XLFLAGS) + +all :: r3-vc6-stlport.exe r4-vc6-stlport.exe r5-vc6-stlport.exe r6-vc6-stlport.exe r7-vc6-stlport.exe r8-vc6-stlport.exe + r1-vc6-stlport + r2-vc6-stlport + r3-vc6-stlport + r4-vc6-stlport + r5-vc6-stlport + r6-vc6-stlport + -copy ..\..\build\vc6\boost_regex*.dll + -copy ..\..\..\..\stage\lib\boost_regex*.dll + r7-vc6-stlport + r8-vc6-stlport + +r3-vc6-stlport.exe : + cl /MT $(CFLAGS) /O2 -o r3-vc6-stlport.exe $(SOURCES) $(LFLAGS) + +r4-vc6-stlport.exe : + cl /MTd $(CFLAGS) -o r4-vc6-stlport.exe $(SOURCES) $(LFLAGS) + +r5-vc6-stlport.exe : + cl /MD $(CFLAGS) /O2 -o r5-vc6-stlport.exe $(SOURCES) $(LFLAGS) + +r6-vc6-stlport.exe : + cl /MDd $(CFLAGS) -o r6-vc6-stlport.exe $(SOURCES) $(LFLAGS) + +r7-vc6-stlport.exe : + cl /MD $(CFLAGS) /O2 /DBOOST_ALL_DYN_LINK -o r7-vc6-stlport.exe $(SOURCES) $(LFLAGS) + +r8-vc6-stlport.exe : + cl /MDd $(CFLAGS) /DBOOST_ALL_DYN_LINK -o r8-vc6-stlport.exe $(SOURCES) $(LFLAGS) + + + diff --git a/libs/regex/test/regress/vc6.mak b/libs/regex/test/regress/vc6.mak new file mode 100644 index 0000000000..019fcf6265 --- /dev/null +++ b/libs/regex/test/regress/vc6.mak @@ -0,0 +1,68 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for regression tests +# +# Visual C++ 6 +# +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# sources to compile for each test: +# +SOURCES=*.cpp + +CFLAGS= $(INCLUDES) /Zm400 /GF /Gy -GX -GR -I..\..\..\..\ /DBOOST_LIB_DIAGNOSTIC=1 $(CXXFLAGS) + +LFLAGS= -link /LIBPATH:..\..\..\..\stage\lib /LIBPATH:..\..\build\vc6 user32.lib $(XLFLAGS) + +all :: r1-vc6.exe r2-vc6.exe r3-vc6.exe r4-vc6.exe r5-vc6.exe r6-vc6.exe r7-vc6.exe r8-vc6.exe + r1-vc6 + r2-vc6 + r3-vc6 + r4-vc6 + r5-vc6 + r6-vc6 + -copy ..\..\build\vc6\boost_regex*.dll + -copy ..\..\..\..\stage\lib\boost_regex*.dll + r7-vc6 + r8-vc6 + +r1-vc6.exe : + cl /ML $(CFLAGS) /O2 -o r1-vc6.exe $(SOURCES) $(LFLAGS) + +r2-vc6.exe : + cl /MLd $(CFLAGS) -o r2-vc6.exe $(SOURCES) $(LFLAGS) + +r3-vc6.exe : + cl /MT $(CFLAGS) /O2 -o r3-vc6.exe $(SOURCES) $(LFLAGS) + +r4-vc6.exe : + cl /MTd $(CFLAGS) -o r4-vc6.exe $(SOURCES) $(LFLAGS) + +r5-vc6.exe : + cl /MD $(CFLAGS) /O2 -o r5-vc6.exe $(SOURCES) $(LFLAGS) + +r6-vc6.exe : + cl /MDd $(CFLAGS) -o r6-vc6.exe $(SOURCES) $(LFLAGS) + +r7-vc6.exe : + cl /MD $(CFLAGS) /O2 /DBOOST_ALL_DYN_LINK -o r7-vc6.exe $(SOURCES) $(LFLAGS) + +r8-vc6.exe : + cl /MDd $(CFLAGS) /DBOOST_ALL_DYN_LINK -o r8-vc6.exe $(SOURCES) $(LFLAGS) + + + diff --git a/libs/regex/test/regress/vc7.mak b/libs/regex/test/regress/vc7.mak new file mode 100644 index 0000000000..d4ea3bc150 --- /dev/null +++ b/libs/regex/test/regress/vc7.mak @@ -0,0 +1,68 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for regression tests +# +# Visual C++ 6 +# +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# sources to compile for each test: +# +SOURCES=*.cpp + +CFLAGS= $(INCLUDES) /Zm400 /O2 /GB /GF /Gy -GX -GR -I..\..\..\..\ $(CXXFLAGS) /DBOOST_LIB_DIAGNOSTIC=1 /Zc:wchar_t + +LFLAGS= -link /LIBPATH:..\..\..\..\stage\lib /LIBPATH:..\..\build\vc7 $(XLFLAGS) + +all :: r1-vc7.exe r2-vc7.exe r3-vc7.exe r4-vc7.exe r5-vc7.exe r6-vc7.exe r7-vc7.exe r8-vc7.exe + r1-vc7 + r2-vc7 + r3-vc7 + r4-vc7 + r5-vc7 + r6-vc7 + -copy ..\..\build\vc7\boost_regex*.dll + -copy ..\..\..\..\stage\lib\boost_regex*.dll + r7-vc7 + r8-vc7 + +r1-vc7.exe : + cl /ML $(CFLAGS) /O2 -o r1-vc7.exe $(SOURCES) $(LFLAGS) + +r2-vc7.exe : + cl /MLd $(CFLAGS) -o r2-vc7.exe $(SOURCES) $(LFLAGS) + +r3-vc7.exe : + cl /MT $(CFLAGS) /O2 -o r3-vc7.exe $(SOURCES) $(LFLAGS) + +r4-vc7.exe : + cl /MTd $(CFLAGS) -o r4-vc7.exe $(SOURCES) $(LFLAGS) + +r5-vc7.exe : + cl /MD $(CFLAGS) /O2 -o r5-vc7.exe $(SOURCES) $(LFLAGS) + +r6-vc7.exe : + cl /MDd $(CFLAGS) -o r6-vc7.exe $(SOURCES) $(LFLAGS) + +r7-vc7.exe : + cl /MD $(CFLAGS) /O2 /DBOOST_ALL_DYN_LINK -o r7-vc7.exe $(SOURCES) $(LFLAGS) + +r8-vc7.exe : + cl /MDd $(CFLAGS) /DBOOST_ALL_DYN_LINK -o r8-vc7.exe $(SOURCES) $(LFLAGS) + + + diff --git a/libs/regex/test/regress/vc71.mak b/libs/regex/test/regress/vc71.mak new file mode 100644 index 0000000000..831b252354 --- /dev/null +++ b/libs/regex/test/regress/vc71.mak @@ -0,0 +1,68 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for regression tests +# +# Visual C++ 7.1 +# +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# sources to compile for each test: +# +SOURCES=*.cpp + +CFLAGS= $(INCLUDES) /Zm400 /GB /GF /Gy -GX -GR -I..\..\..\..\ $(CXXFLAGS) /DBOOST_LIB_DIAGNOSTIC=1 /Zc:wchar_t + +LFLAGS= -link /LIBPATH:..\..\..\..\stage\lib /LIBPATH:..\..\build\vc71 $(XLFLAGS) + +all :: r1-vc71.exe r2-vc71.exe r3-vc71.exe r4-vc71.exe r5-vc71.exe r6-vc71.exe r7-vc71.exe r8-vc71.exe + r1-vc71 + r2-vc71 + r3-vc71 + r4-vc71 + r5-vc71 + r6-vc71 + -copy ..\..\build\vc71\boost_regex*.dll + -copy ..\..\..\..\stage\lib\boost_regex*.dll + r7-vc71 + r8-vc71 + +r1-vc71.exe : + cl /ML $(CFLAGS) /O2 -o r1-vc71.exe $(SOURCES) $(LFLAGS) + +r2-vc71.exe : + cl /MLd $(CFLAGS) -o r2-vc71.exe $(SOURCES) $(LFLAGS) + +r3-vc71.exe : + cl /MT $(CFLAGS) /O2 -o r3-vc71.exe $(SOURCES) $(LFLAGS) + +r4-vc71.exe : + cl /MTd $(CFLAGS) -o r4-vc71.exe $(SOURCES) $(LFLAGS) + +r5-vc71.exe : + cl /MD $(CFLAGS) /O2 -o r5-vc71.exe $(SOURCES) $(LFLAGS) + +r6-vc71.exe : + cl /MDd $(CFLAGS) -o r6-vc71.exe $(SOURCES) $(LFLAGS) + +r7-vc71.exe : + cl /MD $(CFLAGS) /O2 /DBOOST_ALL_DYN_LINK -o r7-vc71.exe $(SOURCES) $(LFLAGS) + +r8-vc71.exe : + cl /MDd $(CFLAGS) /DBOOST_ALL_DYN_LINK -o r8-vc71.exe $(SOURCES) $(LFLAGS) + + + diff --git a/libs/regex/test/regress/vc8.mak b/libs/regex/test/regress/vc8.mak new file mode 100644 index 0000000000..68c4a8fe41 --- /dev/null +++ b/libs/regex/test/regress/vc8.mak @@ -0,0 +1,68 @@ +# copyright John Maddock 2003 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt. + +# very basic makefile for regression tests +# +# Visual C++ 8.0 +# +# +# Add additional compiler options here: +# +CXXFLAGS= +# +# Add additional include directories here: +# +INCLUDES= +# +# add additional linker flags here: +# +XLFLAGS= +# +# sources to compile for each test: +# +SOURCES=*.cpp + +CFLAGS= $(INCLUDES) /Zm400 /GB /GF /Gy -GX -GR -I..\..\..\..\ $(CXXFLAGS) /DBOOST_LIB_DIAGNOSTIC=1 /Zc:wchar_t + +LFLAGS= -link /LIBPATH:..\..\..\..\stage\lib /LIBPATH:..\..\build\vc80 $(XLFLAGS) + +all :: r1-vc8.exe r2-vc8.exe r3-vc8.exe r4-vc8.exe r5-vc8.exe r6-vc8.exe r7-vc8.exe r8-vc8.exe + r1-vc8 + r2-vc8 + r3-vc8 + r4-vc8 + r5-vc8 + r6-vc8 + -copy ..\..\build\vc80\boost_regex*.dll + -copy ..\..\..\..\stage\lib\boost_regex*.dll + r7-vc8 + r8-vc8 + +r1-vc8.exe : + cl /ML $(CFLAGS) /O2 -o r1-vc8.exe $(SOURCES) $(LFLAGS) + +r2-vc8.exe : + cl /MLd $(CFLAGS) -o r2-vc8.exe $(SOURCES) $(LFLAGS) + +r3-vc8.exe : + cl /MT $(CFLAGS) /O2 -o r3-vc8.exe $(SOURCES) $(LFLAGS) + +r4-vc8.exe : + cl /MTd $(CFLAGS) -o r4-vc8.exe $(SOURCES) $(LFLAGS) + +r5-vc8.exe : + cl /MD $(CFLAGS) /O2 -o r5-vc8.exe $(SOURCES) $(LFLAGS) + +r6-vc8.exe : + cl /MDd $(CFLAGS) -o r6-vc8.exe $(SOURCES) $(LFLAGS) + +r7-vc8.exe : + cl /MD $(CFLAGS) /O2 /DBOOST_ALL_DYN_LINK -o r7-vc8.exe $(SOURCES) $(LFLAGS) + +r8-vc8.exe : + cl /MDd $(CFLAGS) /DBOOST_ALL_DYN_LINK -o r8-vc8.exe $(SOURCES) $(LFLAGS) + + + diff --git a/libs/regex/test/static_mutex/static_mutex_test.cpp b/libs/regex/test/static_mutex/static_mutex_test.cpp new file mode 100644 index 0000000000..b31eefac3e --- /dev/null +++ b/libs/regex/test/static_mutex/static_mutex_test.cpp @@ -0,0 +1,206 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE static_mutex_test.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: test program for boost::static_mutex. + */ + +#include <iostream> +#include <boost/regex/pending/static_mutex.hpp> +#include <boost/thread/thread.hpp> +#include <boost/timer.hpp> + +// +// we cannot use the regular Boost.Test in here: it is not thread safe +// and calls to BOOST_TEST will eventually crash on some compilers +// (Borland certainly) due to race conditions inside the Boost.Test lib. +// +#define BOOST_TEST(pred) if(!(pred)) failed_test(__FILE__, __LINE__, BOOST_STRINGIZE(pred)); + +int total_failures = 0; +void failed_test(const char* file, int line, const char* pred) +{ + static boost::static_mutex mut = BOOST_STATIC_MUTEX_INIT ; + boost::static_mutex::scoped_lock guard(mut); + ++total_failures; + std::cout << "Failed test in \"" << file << "\" at line " << line << ": " << pred << std::endl; +} + +void print_cycles(int c) +{ + static boost::static_mutex mut = BOOST_STATIC_MUTEX_INIT ; + boost::static_mutex::scoped_lock guard(mut); + std::cout << "Thread exited after " << c << " cycles." << std::endl; +} + +bool sufficient_time() +{ + // return true if enough time has passed since the tests began: + static boost::static_mutex mut = BOOST_STATIC_MUTEX_INIT ; + boost::static_mutex::scoped_lock guard(mut); + static boost::timer t; + // is 10 seconds enough? + return t.elapsed() >= 10.0; +} + +// define three trivial test proceedures: +bool t1() +{ + static boost::static_mutex mut = BOOST_STATIC_MUTEX_INIT ; + static int has_lock = 0; + static int data = 10000; + + boost::static_mutex::scoped_lock guard(mut); + BOOST_TEST(++has_lock == 1); + BOOST_TEST(guard.locked()); + BOOST_TEST(guard); + bool result = (--data > 0) ? true : false; + BOOST_TEST(--has_lock == 0); + return result; +} + +bool t2() +{ + static boost::static_mutex mut = BOOST_STATIC_MUTEX_INIT ; + static int has_lock = 0; + static int data = 10000; + + boost::static_mutex::scoped_lock guard(mut, false); + BOOST_TEST(0 == guard.locked()); + BOOST_TEST(!guard); + guard.lock(); + BOOST_TEST(++has_lock == 1); + BOOST_TEST(guard.locked()); + BOOST_TEST(guard); + bool result = (--data > 0) ? true : false; + BOOST_TEST(--has_lock == 0); + guard.unlock(); + BOOST_TEST(0 == guard.locked()); + BOOST_TEST(!guard); + return result; +} + +bool t3() +{ + static boost::static_mutex mut = BOOST_STATIC_MUTEX_INIT ; + static int has_lock = 0; + static int data = 10000; + + boost::static_mutex::scoped_lock guard(mut); + BOOST_TEST(++has_lock == 1); + BOOST_TEST(guard.locked()); + BOOST_TEST(guard); + bool result = (--data > 0) ? true : false; + BOOST_TEST(--has_lock == 0); + return result; +} + +// define their thread procs: +void thread1_proc() +{ + int cycles = 0; + while(!sufficient_time()) + { + t1(); + t2(); + ++cycles; + } + print_cycles(cycles); +} + +void thread2_proc() +{ + int cycles = 0; + while(!sufficient_time()) + { + t2(); + t3(); + ++cycles; + } + print_cycles(cycles); +} + +void thread3_proc() +{ + int cycles = 0; + while(!sufficient_time()) + { + t1(); + t3(); + ++cycles; + } + print_cycles(cycles); +} + +// make sure that at least one of our test proceedures +// is called during program startup: +struct startup1 +{ + startup1() + { + t1(); + } + ~startup1() + { + t1(); + } +}; + +startup1 up1; + +int main() +{ + (void)up1; + + std::list<boost::shared_ptr<boost::thread> > threads; + for(int i = 0; i < 2; ++i) + { + try{ + threads.push_back(boost::shared_ptr<boost::thread>(new boost::thread(&thread1_proc))); + } + catch(const std::exception& e) + { + std::cerr << "<note>Thread creation failed with message: " << e.what() << "</note>" << std::endl; + } + } + for(int i = 0; i < 2; ++i) + { + try{ + threads.push_back(boost::shared_ptr<boost::thread>(new boost::thread(&thread2_proc))); + } + catch(const std::exception& e) + { + std::cerr << "<note>Thread creation failed with message: " << e.what() << "</note>" << std::endl; + } + } + for(int i = 0; i < 2; ++i) + { + try{ + threads.push_back(boost::shared_ptr<boost::thread>(new boost::thread(&thread3_proc))); + } + catch(const std::exception& e) + { + std::cerr << "<note>Thread creation failed with message: " << e.what() << "</note>" << std::endl; + } + } + + std::list<boost::shared_ptr<boost::thread> >::const_iterator a(threads.begin()), b(threads.end()); + while(a != b) + { + (*a)->join(); + ++a; + } + + return total_failures; +} diff --git a/libs/regex/test/test_consolidated.cpp b/libs/regex/test/test_consolidated.cpp new file mode 100644 index 0000000000..188033f7f8 --- /dev/null +++ b/libs/regex/test/test_consolidated.cpp @@ -0,0 +1,29 @@ +/* + * + * Copyright (c) 2011 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + +#include <libs/regex/src/c_regex_traits.cpp> +#include <libs/regex/src/cpp_regex_traits.cpp> +#include <libs/regex/src/cregex.cpp> +#include <libs/regex/src/fileiter.cpp> +#include <libs/regex/src/icu.cpp> +#include <libs/regex/src/instances.cpp> +#include <libs/regex/src/posix_api.cpp> +#include <libs/regex/src/regex.cpp> +#include <libs/regex/src/regex_debug.cpp> +#include <libs/regex/src/regex_raw_buffer.cpp> +#include <libs/regex/src/regex_traits_defaults.cpp> +#include <libs/regex/src/static_mutex.cpp> +#include <libs/regex/src/usinstances.cpp> +#include <libs/regex/src/wc_regex_traits.cpp> +#include <libs/regex/src/w32_regex_traits.cpp> +#include <libs/regex/src/wide_posix_api.cpp> +#include <libs/regex/src/winstances.cpp> diff --git a/libs/regex/test/unicode/unicode_iterator_test.cpp b/libs/regex/test/unicode/unicode_iterator_test.cpp new file mode 100644 index 0000000000..a6facb2c7a --- /dev/null +++ b/libs/regex/test/unicode/unicode_iterator_test.cpp @@ -0,0 +1,281 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE unicode_iterator_test.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Simple test suite for Unicode interconversions. + */ + +#include <boost/regex/pending/unicode_iterator.hpp> +#include <boost/test/included/test_exec_monitor.hpp> +#include <vector> +#include <iterator> +#include <algorithm> + +#if !defined(TEST_UTF8) && !defined(TEST_UTF16) +# define TEST_UTF8 +# define TEST_UTF16 +#endif + +template <class I> +typename I::value_type iterate_over(I a, I b) +{ + typedef typename I::value_type value_type; + value_type v = 0; + while(a != b) + { + v ^= *a; + ++a; + } + return v; +} + +void spot_checks() +{ + // test specific values ripped straight out of the Unicode standard + // to verify that our encoding is the same as theirs, as well as + // self-consistent: + ::boost::uint32_t spot16[] = { 0x10302u, }; + typedef boost::u32_to_u16_iterator<const ::boost::uint32_t*> u32to16type; + + u32to16type it(spot16); + BOOST_CHECK_EQUAL(*it++, 0xD800u); + BOOST_CHECK_EQUAL(*it++, 0xDF02u); + BOOST_CHECK_EQUAL(*--it, 0xDF02u); + BOOST_CHECK_EQUAL(*--it, 0xD800u); + + ::boost::uint32_t spot8[] = { 0x004Du, 0x0430u, 0x4E8Cu, 0x10302u, }; + typedef boost::u32_to_u8_iterator<const ::boost::uint32_t*> u32to8type; + + u32to8type it8(spot8); + BOOST_CHECK_EQUAL(*it8++, 0x4Du); + BOOST_CHECK_EQUAL(*it8++, 0xD0u); + BOOST_CHECK_EQUAL(*it8++, 0xB0u); + BOOST_CHECK_EQUAL(*it8++, 0xE4u); + BOOST_CHECK_EQUAL(*it8++, 0xBAu); + BOOST_CHECK_EQUAL(*it8++, 0x8Cu); + BOOST_CHECK_EQUAL(*it8++, 0xF0u); + BOOST_CHECK_EQUAL(*it8++, 0x90u); + BOOST_CHECK_EQUAL(*it8++, 0x8Cu); + BOOST_CHECK_EQUAL(*it8++, 0x82u); + + BOOST_CHECK_EQUAL(*--it8, 0x82u); + BOOST_CHECK_EQUAL(*--it8, 0x8Cu); + BOOST_CHECK_EQUAL(*--it8, 0x90u); + BOOST_CHECK_EQUAL(*--it8, 0xF0u); + BOOST_CHECK_EQUAL(*--it8, 0x8Cu); + BOOST_CHECK_EQUAL(*--it8, 0xBAu); + BOOST_CHECK_EQUAL(*--it8, 0xE4u); + BOOST_CHECK_EQUAL(*--it8, 0xB0u); + BOOST_CHECK_EQUAL(*--it8, 0xD0u); + BOOST_CHECK_EQUAL(*--it8, 0x4Du); + // + // Test some bad sequences and verify that our iterators will catch them: + // + boost::uint8_t bad_seq[10] = { 0x4Du, 0xD0u, 0xB0u, 0xE4u, 0xBAu, 0x8Cu, 0xF0u, 0x90u, 0x8Cu, 0x82u }; + BOOST_CHECK_EQUAL( + iterate_over( + boost::u8_to_u32_iterator<const boost::uint8_t*>(bad_seq, bad_seq, bad_seq + 10), + boost::u8_to_u32_iterator<const boost::uint8_t*>(bad_seq+10, bad_seq, bad_seq + 10)), + 0x000149f3u); + BOOST_CHECK_THROW(boost::u8_to_u32_iterator<const boost::uint8_t*>(bad_seq, bad_seq, bad_seq + 9), std::out_of_range); + BOOST_CHECK_THROW(boost::u8_to_u32_iterator<const boost::uint8_t*>(bad_seq, bad_seq, bad_seq + 8), std::out_of_range); + BOOST_CHECK_THROW(boost::u8_to_u32_iterator<const boost::uint8_t*>(bad_seq, bad_seq, bad_seq + 7), std::out_of_range); + BOOST_CHECK_THROW(boost::u8_to_u32_iterator<const boost::uint8_t*>(bad_seq + 2, bad_seq, bad_seq + 10), std::out_of_range); + BOOST_CHECK_THROW(boost::u8_to_u32_iterator<const boost::uint8_t*>(bad_seq + 2, bad_seq + 2, bad_seq + 10), std::out_of_range); + + boost::uint16_t bad_seq2[6] = { 0xD800, 0xDF02, 0xD800, 0xDF02, 0xD800, 0xDF02 }; + BOOST_CHECK_EQUAL( + iterate_over( + boost::u16_to_u32_iterator<const boost::uint16_t*>(bad_seq2, bad_seq2, bad_seq2 + 6), + boost::u16_to_u32_iterator<const boost::uint16_t*>(bad_seq2+6, bad_seq2, bad_seq2 + 6)), + 66306u); + BOOST_CHECK_THROW(boost::u16_to_u32_iterator<const boost::uint16_t*>(bad_seq2, bad_seq2, bad_seq2 + 5), std::out_of_range); + BOOST_CHECK_THROW(boost::u16_to_u32_iterator<const boost::uint16_t*>(bad_seq2 + 1, bad_seq2 + 1, bad_seq2 + 6), std::out_of_range); + BOOST_CHECK_THROW(boost::u16_to_u32_iterator<const boost::uint16_t*>(bad_seq2 + 1, bad_seq2, bad_seq2 + 6), std::out_of_range); +} + +void test(const std::vector< ::boost::uint32_t>& v) +{ + typedef std::vector< ::boost::uint32_t> vector32_type; + typedef std::vector< ::boost::uint16_t> vector16_type; + typedef std::vector< ::boost::uint8_t> vector8_type; + typedef boost::u32_to_u16_iterator<vector32_type::const_iterator, ::boost::uint16_t> u32to16type; + typedef boost::u16_to_u32_iterator<vector16_type::const_iterator, ::boost::uint32_t> u16to32type; +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) + typedef std::reverse_iterator<u32to16type> ru32to16type; + typedef std::reverse_iterator<u16to32type> ru16to32type; +#endif + typedef boost::u32_to_u8_iterator<vector32_type::const_iterator, ::boost::uint8_t> u32to8type; + typedef boost::u8_to_u32_iterator<vector8_type::const_iterator, ::boost::uint32_t> u8to32type; +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) + typedef std::reverse_iterator<u32to8type> ru32to8type; + typedef std::reverse_iterator<u8to32type> ru8to32type; +#endif + vector8_type v8; + vector16_type v16; + vector32_type v32; + vector32_type::const_iterator i, j, k; + +#ifdef TEST_UTF16 + // + // begin by testing forward iteration, of 32-16 bit interconversions: + // +#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) + v16.assign(u32to16type(v.begin()), u32to16type(v.end())); +#else + v16.clear(); + std::copy(u32to16type(v.begin()), u32to16type(v.end()), std::back_inserter(v16)); +#endif +#ifndef BOOST_NO_STD_DISTANCE + BOOST_CHECK_EQUAL((std::size_t)std::distance(u32to16type(v.begin()), u32to16type(v.end())), v16.size()); +#endif +#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) + v32.assign(u16to32type(v16.begin(), v16.begin(), v16.end()), u16to32type(v16.end(), v16.begin(), v16.end())); +#else + v32.clear(); + std::copy(u16to32type(v16.begin(), v16.begin(), v16.end()), u16to32type(v16.end(), v16.begin(), v16.end()), std::back_inserter(v32)); +#endif +#ifndef BOOST_NO_STD_DISTANCE + BOOST_CHECK_EQUAL((std::size_t)std::distance(u16to32type(v16.begin(), v16.begin(), v16.end()), u16to32type(v16.end(), v16.begin(), v16.end())), v32.size()); +#endif + BOOST_CHECK_EQUAL(v.size(), v32.size()); + i = v.begin(); + j = i; + std::advance(j, (std::min)(v.size(), v32.size())); + k = v32.begin(); + BOOST_CHECK_EQUAL_COLLECTIONS(v.begin(), v.end(), v32.begin(), v32.end()); + // + // test backward iteration, of 32-16 bit interconversions: + // +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) + v16.assign(ru32to16type(u32to16type(v.end())), ru32to16type(u32to16type(v.begin()))); +#ifndef BOOST_NO_STD_DISTANCE + BOOST_CHECK_EQUAL((std::size_t)std::distance(ru32to16type(u32to16type(v.end())), ru32to16type(u32to16type(v.begin()))), v16.size()); +#endif + std::reverse(v16.begin(), v16.end()); + v32.assign(ru16to32type(u16to32type(v16.end(), v16.begin(), v16.end())), ru16to32type(u16to32type(v16.begin(), v16.begin(), v16.end()))); +#ifndef BOOST_NO_STD_DISTANCE + BOOST_CHECK_EQUAL((std::size_t)std::distance(ru16to32type(u16to32type(v16.end(), v16.begin(), v16.end())), ru16to32type(u16to32type(v16.begin(), v16.begin(), v16.end()))), v32.size()); +#endif + BOOST_CHECK_EQUAL(v.size(), v32.size()); + std::reverse(v32.begin(), v32.end()); + i = v.begin(); + j = i; + std::advance(j, (std::min)(v.size(), v32.size())); + k = v32.begin(); + BOOST_CHECK_EQUAL_COLLECTIONS(v.begin(), v.end(), v32.begin(), v32.end()); +#endif +#endif // TEST_UTF16 + +#ifdef TEST_UTF8 + // + // Test forward iteration, of 32-8 bit interconversions: + // +#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) + v8.assign(u32to8type(v.begin()), u32to8type(v.end())); +#else + v8.clear(); + std::copy(u32to8type(v.begin()), u32to8type(v.end()), std::back_inserter(v8)); +#endif +#ifndef BOOST_NO_STD_DISTANCE + BOOST_CHECK_EQUAL((std::size_t)std::distance(u32to8type(v.begin()), u32to8type(v.end())), v8.size()); +#endif +#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) + v32.assign(u8to32type(v8.begin(), v8.begin(), v8.end()), u8to32type(v8.end(), v8.begin(), v8.end())); +#else + v32.clear(); + std::copy(u8to32type(v8.begin(), v8.begin(), v8.end()), u8to32type(v8.end(), v8.begin(), v8.end()), std::back_inserter(v32)); +#endif +#ifndef BOOST_NO_STD_DISTANCE + BOOST_CHECK_EQUAL((std::size_t)std::distance(u8to32type(v8.begin(), v8.begin(), v8.end()), u8to32type(v8.end(), v8.begin(), v8.end())), v32.size()); +#endif + BOOST_CHECK_EQUAL(v.size(), v32.size()); + i = v.begin(); + j = i; + std::advance(j, (std::min)(v.size(), v32.size())); + k = v32.begin(); + BOOST_CHECK_EQUAL_COLLECTIONS(v.begin(), v.end(), v32.begin(), v32.end()); + // + // test backward iteration, of 32-8 bit interconversions: + // +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) + v8.assign(ru32to8type(u32to8type(v.end())), ru32to8type(u32to8type(v.begin()))); +#ifndef BOOST_NO_STD_DISTANCE + BOOST_CHECK_EQUAL((std::size_t)std::distance(ru32to8type(u32to8type(v.end())), ru32to8type(u32to8type(v.begin()))), v8.size()); +#endif + std::reverse(v8.begin(), v8.end()); + v32.assign(ru8to32type(u8to32type(v8.end(), v8.begin(), v8.end())), ru8to32type(u8to32type(v8.begin(), v8.begin(), v8.end()))); +#ifndef BOOST_NO_STD_DISTANCE + BOOST_CHECK_EQUAL((std::size_t)std::distance(ru8to32type(u8to32type(v8.end(), v8.begin(), v8.end())), ru8to32type(u8to32type(v8.begin(), v8.begin(), v8.end()))), v32.size()); +#endif + BOOST_CHECK_EQUAL(v.size(), v32.size()); + std::reverse(v32.begin(), v32.end()); + i = v.begin(); + j = i; + std::advance(j, (std::min)(v.size(), v32.size())); + k = v32.begin(); + BOOST_CHECK_EQUAL_COLLECTIONS(v.begin(), v.end(), v32.begin(), v32.end()); +#endif +#endif // TEST_UTF8 + // + // Test checked construction of UTF-8/16 iterators at each location in the sequences: + // +#ifdef TEST_UTF8 + for(u8to32type v8p(v8.begin(), v8.begin(), v8.end()), v8e(v8.end(), v8.begin(), v8.end()); v8p != v8e; ++v8p) + { + u8to32type pos(v8p.base(), v8p.base(), v8.end()); + BOOST_CHECK(pos == v8p); + BOOST_CHECK(*pos == *v8p); + } +#endif +#ifdef TEST_UTF16 + for(u16to32type v16p(v16.begin(), v16.begin(), v16.end()), v16e(v16.end(), v16.begin(), v16.end()); v16p != v16e; ++v16p) + { + u16to32type pos(v16p.base(), v16p.base(), v16.end()); + BOOST_CHECK(pos == v16p); + BOOST_CHECK(*pos == *v16p); + } +#endif +} + +int test_main( int, char* [] ) +{ + // test specific value points from the standard: + spot_checks(); + // now test a bunch of values for self-consistency and round-tripping: + std::vector< ::boost::uint32_t> v; + // start with boundary conditions: + /* + v.push_back(0); + v.push_back(0xD7FF); + v.push_back(0xE000); + v.push_back(0xFFFF); + v.push_back(0x10000); + v.push_back(0x10FFFF); + v.push_back(0x80u); + v.push_back(0x80u - 1); + v.push_back(0x800u); + v.push_back(0x800u - 1); + v.push_back(0x10000u); + v.push_back(0x10000u - 1); + */ + for(unsigned i = 0; i < 0xD800; ++i) + v.push_back(i); + for(unsigned i = 0xDFFF + 1; i < 0x10FFFF; ++i) + v.push_back(i); + test(v); + return 0; +} + +#include <boost/test/included/test_exec_monitor.hpp> diff --git a/libs/regex/tools/generate/tables.cpp b/libs/regex/tools/generate/tables.cpp new file mode 100644 index 0000000000..cd8f51ee57 --- /dev/null +++ b/libs/regex/tools/generate/tables.cpp @@ -0,0 +1,217 @@ +/* + * + * Copyright (c) 2004 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE tables.cpp + * VERSION see <boost/version.hpp> + * DESCRIPTION: Generates code snippets programatically, for cut-and + * paste into regex source. + */ + +#include <map> +#include <vector> +#include <string> +#include <iostream> +#include <algorithm> +#include <cctype> +#include <boost/config.hpp> + +std::string g_char_type; +std::string g_data_type; +std::map<std::string, std::string> g_table; +std::map<std::string, std::pair<std::string, std::string> > g_help_table; + +void add(std::string key, std::string data) +{ + g_table[key] = data; + if(key.size() <= 2) + g_help_table[data].first = key; + else + g_help_table[data].second = key; + + std::string::size_type i = 0; + while(i < key.size()) + { + if(std::isspace(key[i]) || (key[i] == '-') || (key[i] == '_')) + key.erase(i, 1); + else + { + key[i] = std::tolower(key[i]); + ++i; + } + } +} + +#define ADD(x, y) add(BOOST_STRINGIZE(x), BOOST_STRINGIZE(y)) + +void generate_code() +{ + std::map<std::string, std::string>::const_iterator i, j; + + // begin with the character tables: + std::cout << "static const " << g_char_type << " prop_name_table[] = {\n"; + for(i = g_table.begin(), j = g_table.end(); i != j; ++i) + { + std::cout << " /* " << i->first << " */ "; + for(std::string::size_type n = 0; n < i->first.size(); ++n) + { + std::cout.put('\''); + std::cout.put((i->first)[n]); + std::cout.put('\''); + std::cout.put(','); + std::cout.put(' '); + } + std::cout << std::endl;; + } + std::cout << "};\n\n"; + + // now the iterator table: + std::cout << "static const re_detail::character_pointer_range<" << g_char_type << "> range_data[] = {\n"; + std::size_t index = 0; + for(i = g_table.begin(), j = g_table.end(); i != j; ++i) + { + std::cout << " { prop_name_table+" << index << ", prop_name_table+"; + index += i->first.size(); + std::cout << index << ", }, // " << i->first << std::endl; + } + std::cout << "};\n\n"; + + // now the value table: + std::cout << "static const " << g_data_type << " icu_class_map[] = {\n"; + for(i = g_table.begin(), j = g_table.end(); i != j; ++i) + { + std::cout << " " << i->second << ", // " << i->first << std::endl; + } + std::cout << "};\n\n" << std::flush; + g_table.clear(); +} + +void generate_html() +{ + // start by producing a sorted list: + std::vector<std::pair<std::string, std::string> > v; + std::map<std::string, std::pair<std::string, std::string> >::const_iterator i, j; + i = g_help_table.begin(); + j = g_help_table.end(); + while(i != j) + { + v.push_back(i->second); + ++i; + } + std::sort(v.begin(), v.end()); + + std::vector<std::pair<std::string, std::string> >::const_iterator h, k; + h = v.begin(); + k = v.end(); + + std::cout << "<table width=\"100%\"><tr><td><b>Short Name</b></td><td><b>Long Name</b></td></tr>\n"; + while(h != k) + { + std::cout << "<tr><td>" << (h->first.size() ? h->first : std::string(" ")) << "</td><td>" << h->second << "</td></tr>\n"; + ++h; + } + std::cout << "</table>\n\n"; +} + +int main() +{ + g_char_type = "::UChar32"; + g_data_type = "icu_regex_traits::char_class_type"; + ADD(L*, U_GC_L_MASK); + ADD(Letter, U_GC_L_MASK); + ADD(Lu, U_GC_LU_MASK); + ADD(Ll, U_GC_LL_MASK); + ADD(Lt, U_GC_LT_MASK); + ADD(Lm, U_GC_LM_MASK); + ADD(Lo, U_GC_LO_MASK); + ADD(Uppercase Letter, U_GC_LU_MASK); + ADD(Lowercase Letter, U_GC_LL_MASK); + ADD(Titlecase Letter, U_GC_LT_MASK); + ADD(Modifier Letter, U_GC_LM_MASK); + ADD(Other Letter, U_GC_LO_MASK); + + ADD(M*, U_GC_M_MASK); + ADD(Mn, U_GC_MN_MASK); + ADD(Mc, U_GC_MC_MASK); + ADD(Me, U_GC_ME_MASK); + ADD(Mark, U_GC_M_MASK); + ADD(Non-Spacing Mark, U_GC_MN_MASK); + ADD(Spacing Combining Mark, U_GC_MC_MASK); + ADD(Enclosing Mark, U_GC_ME_MASK); + + ADD(N*, U_GC_N_MASK); + ADD(Nd, U_GC_ND_MASK); + ADD(Nl, U_GC_NL_MASK); + ADD(No, U_GC_NO_MASK); + ADD(Number, U_GC_N_MASK); + ADD(Decimal Digit Number, U_GC_ND_MASK); + ADD(Letter Number, U_GC_NL_MASK); + ADD(Other Number, U_GC_NO_MASK); + + ADD(S*, U_GC_S_MASK); + ADD(Sm, U_GC_SM_MASK); + ADD(Sc, U_GC_SC_MASK); + ADD(Sk, U_GC_SK_MASK); + ADD(So, U_GC_SO_MASK); + ADD(Symbol, U_GC_S_MASK); + ADD(Math Symbol, U_GC_SM_MASK); + ADD(Currency Symbol, U_GC_SC_MASK); + ADD(Modifier Symbol, U_GC_SK_MASK); + ADD(Other Symbol, U_GC_SO_MASK); + + ADD(P*, U_GC_P_MASK); + ADD(Pc, U_GC_PC_MASK); + ADD(Pd, U_GC_PD_MASK); + ADD(Ps, U_GC_PS_MASK); + ADD(Pe, U_GC_PE_MASK); + ADD(Pi, U_GC_PI_MASK); + ADD(Pf, U_GC_PF_MASK); + ADD(Po, U_GC_PO_MASK); + ADD(Punctuation, U_GC_P_MASK); + ADD(Connector Punctuation, U_GC_PC_MASK); + ADD(Dash Punctuation, U_GC_PD_MASK); + ADD(Open Punctuation, U_GC_PS_MASK); + ADD(Close Punctuation, U_GC_PE_MASK); + ADD(Initial Punctuation, U_GC_PI_MASK); + ADD(Final Punctuation, U_GC_PF_MASK); + ADD(Other Punctuation, U_GC_PO_MASK); + + ADD(Z*, U_GC_Z_MASK); + ADD(Zs, U_GC_ZS_MASK); + ADD(Zl, U_GC_ZL_MASK); + ADD(Zp, U_GC_ZP_MASK); + ADD(Separator, U_GC_Z_MASK); + ADD(Space Separator, U_GC_ZS_MASK); + ADD(Line Separator, U_GC_ZL_MASK); + ADD(Paragraph Separator, U_GC_ZP_MASK); + + ADD(C*, U_GC_C_MASK); + ADD(Cc, U_GC_CC_MASK); + ADD(Cf, U_GC_CF_MASK); + ADD(Cs, U_GC_CS_MASK); + ADD(Co, U_GC_CO_MASK); + ADD(Cn, U_GC_CN_MASK); + ADD(Other, U_GC_C_MASK); + ADD(Control, U_GC_CC_MASK); + ADD(Format, U_GC_CF_MASK); + ADD(Surrogate, U_GC_CS_MASK); + ADD(Private Use, U_GC_CO_MASK); + ADD(Not Assigned, U_GC_CN_MASK); + ADD(Any, icu_regex_traits::mask_any); + ADD(Assigned, (0x3FFFFFFFu) & ~(U_GC_CN_MASK)); + ADD(ASCII, icu_regex_traits::mask_ascii); + ADD(Titlecase, U_GC_LT_MASK); + + generate_code(); + generate_html(); + return 0; +} |